c# - 在c#中使用dll的问题

标签 c# com dll

我需要在 C# 程序中使用非托管 COM dll。 Dll 包含一个函数,比如:

Open(char *name);

但是当导入到 c#(项目->添加引用)时,它可以作为:

mydll.Open(ref byte name)

如何将字符串传递给此函数?

当我这样做时:

byte[] name = new byte[32];
mydll.Open(ref name);

我收到编译错误“无法将 ref byte[] 转换为 ref byte”。

最佳答案

如果你的意思是它是一个字符串,那么在你的 IDL 文件中,你必须指定这个点代表一个字符串。有关 [string] 属性的信息,请参阅本文: http://msdn.microsoft.com/en-us/library/d9a4wd1h%28v=VS.80%29.aspx 如果您想符合 CLS(并与脚本语言互操作,您可能想研究使用 BSTR 而不是 char* 来传递字符串)。这样您也将获得 unicode 支持。

除非您向 COM 提示这是一个字符串,否则只要 COM 必须编码参数(即跨越单元或进程边界),您就会遇到问题。

本文还可以为您提供有关 C++/C#/COM 好东西的良好起点: COM Interop Part 1: C# Client Tutorial

关于c# - 在c#中使用dll的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3114503/

相关文章:

c# - 如何在不解析 C# 中的请求流的情况下根据内容长度拒绝和 HTTP Posts?

c++ - 深奥的 JScript 托管问题:IDispatch::Invoke 返回 SCRIPT_E_PROPAGATE 时的错误代码在哪里?

c++ - 如何构建在所有机器上表现相同的 exe

c# - 如何顺利开发C#/.NET的C库?

c++ boost asio 异步函数不能在 dll 中工作

c# - 可以全屏打开程序的应用程序?

c# - C# Take(k) 扩展方法会依次执行一个完整的前一个GroupBy吗?

c# - Entity Framework 7 审计日志

c++ - 将 CComBSTR 与 NULL 进行比较

Delphi:使用 LoadLibrary 加载 DLL 的奇怪行为