C#通过引用C+传递int和string+;ActiveX控件:类型不匹配 我有一个问题,通过引用int或字符串变量到C++ ActiveX控件。 此外,我通过引用C++变量来传递这些变量,所有的工作都很好。
C++DLL:C#通过引用C+传递int和string+;ActiveX控件:类型不匹配 我有一个问题,通过引用int或字符串变量到C++ ActiveX控件。 此外,我通过引用C++变量来传递这些变量,所有的工作都很好。,c#,c++,activex,pass-by-reference,C#,C++,Activex,Pass By Reference,C++DLL: __declspec (dllexport) void Execute (LPCTSTR cmd, int& resultCode, LPCTSTR& message, long& receiptNumber) { message = _T("ReplyProblem"); resultCode = 100; receiptNumber = -1; } C#: 如何在ActiveX控件中完成此操作?我试图使用&reference符
__declspec (dllexport) void
Execute (LPCTSTR cmd, int& resultCode, LPCTSTR& message, long& receiptNumber)
{
message = _T("ReplyProblem");
resultCode = 100;
receiptNumber = -1;
}
C#:
如何在ActiveX控件中完成此操作?我试图使用&reference符号定义方法,但MIDL编译器不允许这样做
MyCOM.idl:
[id(1025315)] void Execute (LPCTSTR cmd, [out]long& returnCode); // MIDL2025: syntax error
[id(1025315)] void Execute (LPCTSTR cmd, [out]long* returnCode);
我修改了方法以使用指针*
MyCOM.idl:
[id(1025315)] void Execute (LPCTSTR cmd, [out]long& returnCode); // MIDL2025: syntax error
[id(1025315)] void Execute (LPCTSTR cmd, [out]long* returnCode);
MyCOMCtrl.h:
// Dispatch maps
afx_msg void Execute (LPCTSTR cmd, long* resultCode);
MyCOMCtrl.cpp
// Dispatch map
...
DISP_FUNCTION_ID(MyCOMCtrl, "Execute", DISPID_EXECUTE_METHOD, Execute, VT_EMPTY, VTS_PI4)
...
void MyCOMCtrl::Execute (LPCTSTR cmd, long* resultCode)
{
*resultCode = 111;
}
C#:
在C++ ActiveX中,使用C类型和LPCTSTR *中的字符串类型发生了相同的异常。 任何提示或建议都将不胜感激。
这只是一个很长的尝试(没有双关语),但请尝试为您的.net resultCode变量使用“long”数据类型。这只是一个很长的尝试(没有双关语),但请尝试为您的.net resultCode变量使用“long”数据类型。解决: 在MyCOMCtrl.cpp中:// Dispatch map
...
DISP_FUNCTION_ID(MyCOMCtrl, "Execute", DISPID_EXECUTE_METHOD, Execute, VT_EMPTY, VTS_PI4)
...
必须是:
DISP_FUNCTION_ID(MyCOMCtrl, "Execute", DISPID_EXECUTE_METHOD, Execute, VT_EMPTY, VTS_BSTR VTS_PI4) // two VTS arguments
已解决:
在MyCOMCtrl.cpp中:
// Dispatch map
...
DISP_FUNCTION_ID(MyCOMCtrl, "Execute", DISPID_EXECUTE_METHOD, Execute, VT_EMPTY, VTS_PI4)
...
必须是:
DISP_FUNCTION_ID(MyCOMCtrl, "Execute", DISPID_EXECUTE_METHOD, Execute, VT_EMPTY, VTS_BSTR VTS_PI4) // two VTS arguments
执行方法的Intellisense提供的声明为void MyCOM.Execute(字符串cmd,out int resultCode)在.net中传递给执行方法的长类型导致编译错误:参数“2”:无法从“out long”转换为“out int”。执行方法的Intellisense提供的声明为void MyCOM.Execute(字符串cmd,out-int-resultCode)传递给.net中执行方法的长类型导致编译错误:参数“2”:无法从“out-long”转换为“out-int”