2 sxl 88 sxl_88 于 2015.07.28 15:45 提问

请问如何实现C#调用C++ dll动态链接库
c#

通过C# 调用 C++ 的JNetLogin方法;
下面是C#的调用方法,但是一直报错,可能是参数的问题.请问如何修改下面的代码,谢谢!
[DllImport("JNetSDK.dll")]
public static extern long JNetLogin(string lpszIP, int iDevPort, string lpszUser, string lpszPassword, int iTimeOut, fcbJEvent * pfcbEvent, DWORD dwProtocol, long &lLogin, PSTJProxyParam pstProxy);

C++ API:
long JNetLogin(
LPCTSTR lpszIP,
int iDevPort,
LPCTSTR lpszUser,
LPCTSTR lpszPassword,
int iTimeOut,
fcbJEvent *pfcbEvent,
DWORD dwProtocol,
long &lLogin,
PSTJProxyParam pstProxy
)

typedef int (__stdcall fcbJEvent)(long lHandle, eJNetEvent eType,int iDataType,void* pEventData,int iDataLen,void* pUserParam);

typedef enum
{
JNET_EET_UNKNOWN = -1,
JNET_EET_LOGINING = 0,
JNET_EET_LOGIN_OK = 1,
JNET_EET_LOGIN_ERROR = 2,
JNET_EET_LOGOUT = 3,
JNET_EET_STREAM_OPENING = 4,
JNET_EET_STREAM_OK = 5,
JNET_EET_STREAM_ERROR = 6,
JNET_EET_STREAM_CLOSE = 7,
JNET_EET_PB_OPENING = 8,
JNET_EET_PB_OK = 9,
JNET_EET_PB_ERROR = 10,
JNET_EET_PB_CLOSE = 11,
JNET_EET_TALK_OPENING = 12,
JNET_EET_TALK_OK = 13,
JNET_EET_TALK_ERROR = 14,
JNET_EET_TALK_CLOSE = 15,
JNET_EET_UPG_START = 16,
JNET_EET_UPG_OK = 17,
JNET_EET_UPG_ERR = 18,

JNET_EET_CFG_SET = 100,

JNET_EET_CFG_GET = 101,

JNET_EET_PTZ_CTRL = 102,

JNET_EET_DEV_CTRL = 103,

JNET_EET_STREAM_LOST = 104,

JNET_EET_EVENT_NOTIFY = 201,

JNET_EET_EVENT_REC_DOWN = 303,

}eJNetEvent;

2个回答

CSDNXIAOD
CSDNXIAOD   2015.07.28 15:56

C#调用C++动态链接库(dll)
C#中如何调用动态链接库DLL
C#中如何调用动态链接库DLL
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

oyljerry
oyljerry   Ds   Rxr 2015.07.28 16:21
 fcbJEvent *pfcbEvent,

PSTJProxyParam pstProxy

这两个是什么类型,是不是标准数据类型,如果是C++等独有类型,C#不好传递对应的参数

Csdn user default icon
上传中...
上传图片
插入图片