已知一个DLL文件包含以下函数请问我如何用C#调用?HANDLE    WINAPI    okOpenBoard(long *lIndex);
BOOL   WINAPI  okCloseBoard(HANDLE hBoard);  
Long WINAPI    okGetLastError(); 
Long WINAPI  okGetBufferSize(HANDLE hBoard, void **lpLinear, \  DWORD *dwSize); 我是这么写的,可以出现了:
检测到 PInvokeStackImbalance
Message: 对 PInvoke 函数“OKTest!OKTest.Form1::okCloseBoard”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
这个错误。 [DllImport("OKAPI32.dll")]
        public static extern bool okCloseBoard();
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Form1.okCloseBoard();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

解决方案 »

  1.   

    try:[DllImport("OKAPI32.dll")]
    public static extern long okOpenBoard(ref long lIndex);
    [DllImport("OKAPI32.dll")]
    public static extern bool okCloseBoard(long hBoard);
    [DllImport("OKAPI32.dll")]
    public static extern bool okGetLastError();
    [DllImport("OKAPI32.dll")]
    public static extern bool okCloseBoard(long hBoard,ref long lIndex,int dwsize);
      

  2.   

    YES 哥们你太棒了 。
    “OKAPI32.dll”
    呵呵。