在c#中使用dll的函数

时间:2015-03-18 13:10:20

标签: c# pinvoke dllimport

我想使用.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。

0 个答案:

没有答案