如何将数据从非托管应用程序传递到 C# COM DLL
How to pass data to C# COM DLL from unmanaged application
С# COM DLL 接口:
public interface IShowDialog
{
void showMessage(byte[] array);
}
并在非托管C++应用程序中调用它:
SAFEARRAY *array;
array = SafeArrayCreateVector(VT_BSTR, 0, 1);
long lidx = 0;
SafeArrayPutElement( array, &lidx, SysAllocString(L"test") );
hr = dlg->showMessage(array);
结果:0x80131533 - COR_E_SAFEARRAYTYPEMISMATCH
COM 接口需要从具有内容VT_I1
实例的SAFEARRAY
的本机代码调用。 您提供的VT_BSTR
值,因此会收到错误。
您需要将字符串值转换为VT_I1
值并将其放入数组中。
编辑
C++名称中的专有名称是VT_I1
而不是VT_BYTE
- http://msdn.microsoft.com/en-us/library/cc235118(v=PROT.10(.aspx
相关文章:
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- 如何将从控制台应用程序C++回调设置为C++ COM DLL
- 使用线程 C# 中的 VC++ 6.0 COM DLL
- 如何调试 COM DLL
- C++ 安全数组在从 c# COM dll 返回时具有无效数据
- 如何从客户端为COM服务器设置dll搜索路径?
- WinAPI - GetLastError 在通过 COM ATL DLL 调用时始终返回 0
- WScript.CreateObject 在调用 C++ COM dll 函数时返回空
- 可视化 使用 C++ API 注册 COM DLL 的所有接口
- 如何返回包含来自com dll的多个空字符的BSTR
- 无法追加到 COM Dll 中的字符串 奇怪的行为
- 如何从MFC DLL中获取与COM包裹的C#对象的接口
- 当InProcServer32键定义DLL的完整路径时,path环境变量中为什么需要COM DLL的路径
- 当从一个应用程序调用时,在DLL方法中创建COM接口指针是有效的,但当从另一个应用软件调用时则无效
- 合并 c 可执行文件、托管 COM dll 和 .Net GUI
- ATL结构从dll上断开COM对象
- 通过COM从C 解决方案进行调试C#DLL
- 删除/编辑 ATL COM DLL 属性/方法
- C#封送以调用C++DLL.COM和线程问题
- 在非托管c++程序中实现一个c# DLL COM文件