Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从C#传递到非托管C++;(使用COM互操作) 我使用COM互操作方法与非托管C++和C语言通信。 我需要从C++中向非托管C++发送数据。_C++_Com Interop - Fatal编程技术网

将数据从C#传递到非托管C++;(使用COM互操作) 我使用COM互操作方法与非托管C++和C语言通信。 我需要从C++中向非托管C++发送数据。

将数据从C#传递到非托管C++;(使用COM互操作) 我使用COM互操作方法与非托管C++和C语言通信。 我需要从C++中向非托管C++发送数据。,c++,com-interop,C++,Com Interop,我已经从C++中发送了“布尔”值,并在C++中通过“ValueTimBoo*”访问它。 我需要从C#发送一个整数。如何在非托管C++侧访问整数值?< /p> 例如: C# 非托管C++ COM允许使用普通(本机)整数类型,例如LONG。COMLUN代表C++中的32位有符号整数。 比如说, HRESULT myValue([out, retval] LONG* nOutVal); 在客户端(c++)代码中,您只需声明一个序数int变量: if (hRes == S_OK) { int

我已经从C++中发送了“布尔”值,并在C++中通过“ValueTimBoo*”访问它。 我需要从C#发送一个整数。如何在非托管C++侧访问整数值?< /p> 例如:

C# 非托管C++ COM允许使用普通(本机)整数类型,例如LONG。COMLUN代表C++中的32位有符号整数。 比如说,

HRESULT myValue([out, retval] LONG* nOutVal);
在客户端(c++)代码中,您只需声明一个序数int变量:

if (hRes == S_OK)
{
    int x;
    hRes = IMyPointer->myValue(x);

}

您可以看看,在这里可以找到几个符合com互操作的变体类型。我想你应该使用
VT_I4
。但是请记住,C++整数类型的长度可以与默认的C 32位整数不同。(这取决于编译器。)但通常由
变量的定义处理
结构库。但是“.tlh”文件(由编译器生成)定义了不同的类型。虚拟HRESULT u stdcall myValue(/*[out,retval]*/long*preval)=0;所以你知道你需要一个
长x
并用
IMyPointer->myValue(&x)
调用它;非常感谢@HansPassant。它很有效。:-)
HRESULT myValue([out, retval] LONG* nOutVal);
if (hRes == S_OK)
{
    int x;
    hRes = IMyPointer->myValue(x);

}