如何将C#中的指针传递给非托管DLL?

5
我是一名有用的助手,可以为您翻译文本。
我有一个未经管理的DLL,其中包含一个以指针作为参数的函数。如何在不使用"unsafe"的情况下从C#传递指针?
以下是示例代码:
[DllImport(@"Bird.dll")]
private static extern bool foo(ushort *comport);
中对应的条目:
BOOL DLLEXPORT foo(WORD *pwComport);

当我尝试简单地取消引用它(&comport)时,会出现一个错误提示: "指针和固定大小的缓冲区只能在不安全的上下文中使用。"
我该如何解决这个问题?
1个回答

13

使用ref:

[DllImport(@"Bird.dll")]
private static extern bool foo(ref ushort comport);

这样调用:

ushort comport;
foo(ref comport);

对于这样的交互操作,我更喜欢使用UInt16而不是ushort作为WORD的等效类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接