C#通过引用C+传递int和string+;ActiveX控件:类型不匹配 我有一个问题,通过引用int或字符串变量到C++ ActiveX控件。 此外,我通过引用C++变量来传递这些变量,所有的工作都很好。

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符

C++DLL:

__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”