c++ - 将数据从 C# 传递到非托管 C++(使用 COM Interop)

标签 c++ com-interop

我正在使用 Com Interop 方法与非托管 C++ 和 C# 进行通信。

我需要从 C# 向非托管 C++ 发送数据。

我已经从 C# 发送“bool”值并通过 C++ 中的“VARIANT_BOOL*”访问它。

我需要从 C# 发送一个整数。我如何在非托管 C++ 端访问该整数值?

例如:

C#

 public int myValue()
        {
            return 5;
        }

非托管 C++

CoInitialize(NULL);
MyNSpace::MyClassPtr IMyPointer;

 HRESULT  hRes =  IMyPointer.CreateInstance(MyNSpace::CLSID_MyClass);

if (hRes == S_OK)
{
//// ??? define x type

IMyPointer->myValue(x);

}

最佳答案

COM 允许使用普通( native )整数类型,例如 LONG。 COM LONG 在 C++ 中代表 32 位有符号整数。 例如,

HRESULT myValue([out, retval] LONG* nOutVal);

在客户端 (c++) 代码中,您只需声明一个 ordinal int 变量:

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

}

关于c++ - 将数据从 C# 传递到非托管 C++(使用 COM Interop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19091217/

相关文章:

c++ - Base64解码: How to get the data

C# COM DLL,gcServer = true 且 gcAllowVeryLargeObjects = true

c# - 使用 C# 的 Microsoft.Office.Interop.Excel 生成具有预填充下拉值的 Excel 文件

c++ - 多重间接的限制

c++ - *** 检测到堆栈粉碎 *** 使用 FEAST 返回函数时出错

c++ - 如何将 unique_ptr 参数传递给构造函数或函数?

com - VB6 针对并行汇编进行编译

.net - 将 .NET COM Interop 程序集与其托管进程断开

c# - 通过 Interop 从 C# 通过在 COM/C++ 中分配的地址访问非托管内存

c++ - 使用枚举成员值检查变量值的优化方法