请教C#重写C++ DLL中的方法。。
方法是这样的,先用CLIENT_GetNewDevConfig获取信息,out到缓冲区中char szOutBuffer[32*1024] = {0};,然后再用CLIENT_ParseData方法,转换为对应的结构体。
SDK这样说明的。
CLIENT_GetNewDevConfig
获取配置,按照字符串格式
BOOL CLIENT_GetNewDevConfig(
LONG lLoginID,
char *szCommand,
int nChannelID,
char *szOutBuffer,
DWORD dwOutBufferSize,
int *error,
int waittime=500,
);
Parameters
[in]lLoginID:CLIENT_Login的返回值
[in]szCommand:命令参数,"VideoAnalyseGlobal" 视频分析全局配置,对应结构体CFG_ANALYSEGLOBAL_INFO
[in]nChannelID:通道号
[out]szOutBuffer:输出缓冲
[out]dwOutBufferSize:输出缓冲大小
[out]error:错误码
[in]waittime:等待超时时间
Return Values
成功返回TRUE,失败返回FALSE。
Remarks
获取配置,按照字符串格式,各个字符串包含的信息由CLIENT_ParseData解析。
CLIENT_ParseData
解析获取到的字符串配置信息
BOOL CLIENT_ParseData(
char *szCommand,
char *szInBuffer,
LPVOID lpOutBuffer,
DWORD dwOutBufferSize,
void* pReserved
);
Parameters
[in]szCommand:命令参数,如表所示 "VideoAnalyseGlobal" 视频分析全局配置,对应结构体CFG_ANALYSEGLOBAL_INFO
[in]szInBuffer:输入缓冲,字符配置缓冲
[out]lpOutBuffer:输出缓冲,结构体类型可以参见上表
[out]dwOutBufferSize:输出缓冲的大小
[in]pReserved:保留参数
Return Values
成功返回TRUE,失败返回FALSE。
Remarks
此接口配合CLIENT_GetNewDevConfig使用,在使用CLIENT_GetNewDevConfig获取字符串配置信息后,使用此接口从配置信息中提取想要的信息。
CFG_ANALYSEGLOBAL_INFO 是结构体
C++事例代码
int nErr = 0;
char szOutBuffer[32*1024] = {0};
//视频分析全局结构体;
CFG_ANALYSEGLOBAL_INFO stuAnalysGlobalInfo = {0};
// get global info
BOOL bSuccess = CLIENT_GetNewDevConfig(m_lLoginID, "VideoAnalyseGlobal", 0, szOutBuffer, 32*1024, &nErr,3000);
if (bSuccess)
{
int nRetLen = 0;
BOOL bRet = CLIENT_ParseData("VideoAnalyseGlobal", szOutBuffer, (char*)&stuAnalysGlobalInfo, sizeof(CFG_ANALYSEGLOBAL_INFO), &nRetLen);
if (bRet == FALSE)
{
MessageBox("Parser data error", "Prompt");
return FALSE;
}
}
我拿C#重写的,public bool CLIENT_GetNewDevConfig(
int lLoginID,
String szCommand,
int nChannelID,
ref StringBuilder[] szOutBuffer(char[]、Stringbuilder、String 都试过),
double dwOutBufferSize(int ushort 也都试过),
ref int error,
int waittime,
);
可以正常返回True,错误码也正常,但是out的szOutBuffer是null,不太明白这个参数应该怎么重写,是不是应该写成数组。
求教各位。。。
谢谢了