【发布时间】:2014-09-30 15:29:48
【问题描述】:
我有一个external dll(带有如何使用它的C++ 文档),我需要从我的C# 程序中使用其中的一些函数。
我为一些函数写了一个小包装器,它们运行良好,但我不知道如何包装需要函数指针作为参数的函数。
C++ 文档说:
uint NativeFunction(uint32 parameter, GenericFunction *func)
因为GenericFunction 应该得到 2 个 *char 作为参数,所以我用 C# 编写了这个:
public struct GenericFunction
{
public string param1;
public string param2;
}
[DllImport("externalLib.dll", SetLastError = true)]
public static extern uint NativeFunction(uint parameter, GenericFunction func);
当我需要调用它时,我会使用
GenericFunction test = new GenericFunction();
uint result = NativeFunction(0u, test);
有了这个我有这个丑陋的错误:
试图读取或写入受保护的内存。这通常是一个 指示其他内存已损坏。
我很确定我以错误的方式调用该函数,因为我仍然需要定义 GenericFunction 做什么,但我不知道该怎么做,而且这次谷歌没有帮助我!
【问题讨论】:
-
因为我不知道如何将函数指针作为参数传递,所以结构“看起来”很好!我认为标记为重复的问题确实可以解决我的问题,我正在做一些测试
标签: c# dll interop pinvoke wrapper