首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#调用C++类API(C#MFC复合项目),该怎么解决

2012-01-06 
C#调用C++类API(C#,MFC复合项目)我的解决方案里面有两个项目,一个是MFC项目,一个是C#项目,现在需要在C#里

C#调用C++类API(C#,MFC复合项目)
我的解决方案里面有两个项目,一个是MFC项目,一个是C#项目,现在需要在C#里面调用C++类的函数,C++里已经定义了#define PNC_API extern "C" __declspec(dllexport)

以下的C++函数是我需要在C#里面调用的:
PNC_API long RegisterClient(const PLAYOUTNODE& node, u_long svrIP, u_short svrport, IClientCallback* pCallback = NULL, void* act = NULL, u_short localUdpPort = 0);

PNC_API int UnregisterClient(long idClient);

PNC_API bool IsClientRegistered(long idClient);

PNC_API int SendNetMessage(long idClient, u_long dst, u_long msg, const char* data, int len);

PNC_API int SendP2PNetMessage(long idClient, u_long dstip, u_short dstport, u_long msg, const char* data, int len);

谁知道怎么在C#里面写相应的函数原型?(就是[DllImport("PNC.dll")]修饰的函数怎么写)
请大家帮帮忙,感激不尽.



[解决办法]

C# code
[DllImport( "PNC.dll", EntryPoint = "RegisterClient" )]public static extern long RegisterClient ( PLAYOUTNODE node, ulong svrIP, uint svrport, delegateEvent pCallback, object act, int localUdpPort );[DllImport( "PNC.dll", EntryPoint = "UnregisterClient" )]public static extern int UnregisterClient(long idClient );
[解决办法]
探讨
C# code
[DllImport( "PNC.dll", EntryPoint = "RegisterClient" )]
public static extern long RegisterClient ( PLAYOUTNODE node, ulong svrIP, uint svrport, delegateEvent pCallback, object act, int localUdpPort );
[DllImport( "PNC.dll", EntryPoint = "UnregisterClient" )]
public static extern int UnregisterClient(long idClient );

[解决办法]
如果IClientCallback是class类型的话,你还是再弄一个C++/CLI工程做中转。
C# 调用 C++/CLI
C++/CLI调用C++
这样比较容易解决。
[解决办法]

最快的解决办法是用C++/CLI,一般不会出问题
用PInvoke的话很麻烦,还不一定能成功。

再说一下这是非标准DLL,即使用C++/CLI也不一定能成功。

热点排行