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 );
------解决方案--------------------
------解决方案--------------------
如果IClientCallback是class类型的话,你还是再弄一个C++/CLI工程做中转。
C# 调用 C++/CLI
C++/CLI调用C++
这样比较容易解决。
------解决方案--------------------
最快的解决办法是用C++/CLI,一般不会出问题
用PInvoke的话很麻烦,还不一定能成功。
再说一下这是非标准DLL,即使用C++/CLI也不一定能成功。