我想使用.dll的一些函数来管理Digilent(Basys2)的EVB。
制造商向我提供了下一个文件:
dpcdefs.h
dpcutil.h
dpcutil.lib
除了安装在c:/ windows / system32
中的dpcutil.dll我试图在头文件 dpcutil.h中使用apperas的函数:
..... DPCAPI BOOL DpcInit(ERC * perc); ....
在 dpcdefs.h 文件中出现了定义类型ERC。这是一个int:
.... typedef int ERC; /* Error code type */ ....
BOOL类型是:
.... #define BOOL unsigned int ....
我必须使用更多功能,但我没有设法使用这一个属性。我做了一个班来管理这个功能:
class Dpcutil
{
public Dpcutil() { }
const string _dllLocation = "C:\\Windows\\System32\\dpcutil.dll";
[DllImport(_dllLocation)]
public static extern uint DpcInit(ref int perc);
}
程序编译正确,但当我执行函数 DpcInit 程序失败时:
托管调试助手'PInvokeStackImbalance'在'D:\ SVN \ sfa \ trunk \ sw \ digilent_parallel_interface_module_test \ digilent_parallel_interface_module_test \ bin \ Debug \ digilent_parallel_interface_module_test.vshost.exe'中检测到问题。
附加信息:调用PInvoke函数'digilent_parallel_interface_module_test!digilent_parallel_interface_module_test.Dpcutil :: DpcInit'对应阻止堆栈。原因可能是托管的PInvoke签名与目标非托管签名不匹配。检查PInvoke调用签名的约定和参数是否与目标非托管签名匹配。
我不知道我是否正确使用了DllImport。