Som*_*hoo 1 marshalling dllimport
我有一个我需要从C#调用的供应商的DLL.我知道C#数据类与C++数据类型不直接兼容.
所以,鉴于我有一个接收数据并返回"字符串"的函数.
(像这样)
string answer = CreateCode2(int, string1, uint32, string2, uint16);
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能使输入参数兼容,然后使结果字符串兼容?
请 - 我从来没有这样做过:不要给出像"使用P/Invoke"或"使用Marshal"这样的答案我需要一个带示例的教程.
我见过的所有P/Invoke示例都来自.NET Framework 1.1,而Marshall(没有教程)让我很困惑.
此外,我已经看到一些示例告诉我何时创建我的extern函数以使用void*替换所有数据类型.这使我的IDE要求我使用"不安全".
这不是一个教程,但它有很多关于在C#中使用P/Invoke 调用Win32 DLL和P/Invoke的很好的信息
它会让你了解术语,基本概念,如何使用DllImport和应该足以让你去.
MSDN上有一个教程:Platform Invoke Tutorial.
但它很短,说实话,我上面提到的是一个更好的信息来源,但那里有很多.
此处描述的PInvoke签名工具包也很有用.
可以下载到这里.
它允许您粘贴非托管方法签名或结构定义,它将为您提供.NET P/Invoke等效项.这并不是100%完美,但它比你自己弄清楚一切都要快得多.
关于编组专门,我会说开始简单.如果你有一些东西是某种指针,而不是试图使用Marshal直接将它转换为方法签名中的某些.NET类型,有时可能更容易将其视为IntPtr,然后使用Marshal.Copy ,. PtrToString,.PtrToStructure以及将数据转换为.NET类型的其他类似方法.
然后,当您掌握了整个事物时,您可以继续使用Marshal属性进行直接转换.
| 归档时间: |
|
| 查看次数: |
3173 次 |
| 最近记录: |