有一个dll,C++的方法是这样的,主要是传结构体不怎么这块不太懂,C++SDK里的原方法
 BOOL CALL_METHOD CLIENT_GetNewDevConfig(LONG lLoginID, char* szCommand, int nChannelID, char* szOutBuffer, DWORD dwOutBufferSize, int *error, int waittime);
[in]lLoginID,CLIENT_Login的返回值 
[in]szCommand,命令参数,结构体。
[in]nChannelID,通道号 
[out]szOutBuffer,输出缓冲, 
[out]dwOutBufferSize,输出缓冲大小 
[out]error,错误码
[in]waittime,等待超时时间
调用的时候 demo int nErr = 0;
 char szOutBuffer[32*1024] = {0};
 CFG_ANALYSEGLOBAL_INFO stuAnalysGlobalInfo = {0};
 BOOL bSuccess = CLIENT_GetNewDevConfig(m_lLoginID, CFG_CMD_ANALYSEGLOBAL, nChannel, szOutBuffer, 32*1024, &nErr);
对C++不太懂,红色部分不太明白应该拿C# 怎么重写,这个结构体类型不是固定的,好几种类型结构体,有可能是CFG_ANALYSEGLOBAL_INFO,也有可能是 CFG_ANALYSEGLOBAL_INFO2,是不是要把 这个结构体的指针传过去呢? 求教。

解决方案 »

  1.   

    C++中的
    [in]char* 对应 string
    [out]char* 对应 StringBulider(必须先分配)如果是结构,就先用C#定义一个结构,然后分配一个结构变量,且必须初始化该结构
    如果此结构变量是in类型,则直接传递,如果是out类型则添加ref关键字传递
      

  2.   

    BOOL CALL_METHOD CLIENT_GetNewDevConfig(LONG lLoginID, char* szCommand, int nChannelID, char* szOutBuffer, DWORD dwOutBufferSize, int *error, int waittime);char* 使用IntPtr处理就行,定义好结构体以后,把这个结构体转换成一个IntPtr传入就好了