导入C/C 功能到C#
Import C/C++ function into C#
i有一些C代码,使用P/Invoke从C#调用。我正在尝试为此C函数定义C#等效。
SomeData* DoSomething();
struct SomeData
{
...
}
如何将此C方法导入C#?我在定义函数的返回类型时遇到困难。
编辑:我有很多功能要导入。这是让我卡住的。
[DllImport("SomeDll.dll")]
public static extern IntPtr DoSomething();
我考虑使用intptr,即使它以正确的方式之后的方式正确?
我不太确定我理解您的问题,但我会在回答它方面做出镜头。您需要定义从C函数返回的结构,并使用元帅。ptrtoStructure来使用返回的结构。
[DllImport("SomeDll.dll")]
public static extern IntPtr DoSomething();
public struct SomeData
{
//...
}
//code to use returned structure
IntPtr result = DoSomething();
SomeData structResult = (SomeData)Marshal.PtrToStructure(result, typeof(SomeData));
我猜想您要实现的目标是:
- 您的C/C 本机方法不采用任何参数,并将指针返回到结构。
- c#等效是返回intptr(指针)。
问题是您无法将INTPTR解析为C#
中的结构...研究:
元帅。
http://msdn.microsoft.com/en-us/library/4ca6d5z7.aspx
您可以像So
一样包装代码public static class UnsafeNativeMethods
{
[DllImport("SomeDll.dll")]
private static extern IntPtr DoSomething(); //NO DIRECT CALLS TO NATIVE METHODS!!
public static SomeData SafeDoSomething()
{
try
{
return (SomeData)Marshal.PtrToStructure(DoSomething(), typeof(SomeData));
}
catch(Exception ex)
{
//handle exception
}
}
}
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 尝试导入pybind-opencv模块时出现libgtk错误
- 带内存和隔离功能的SQLite
- 导入库可以跨dll版本工作吗
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 建议在运行时将带有类实例的列表从c++导入qml
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 导入C 功能将结构的指针返回到VB.NET中
- 如何查找从哪里导入程序C++特定功能
- 导入C/C 功能到C#
- 使用CNG存储功能导入Windows密钥存储中的持久键