将Dword调用到C#

时间:2015-10-14 01:49:51

标签: c# c++ dll

我有一个C ++ DLL文件。我在尝试将下面提到的函数访问到我的C#代码时遇到了问题。

DLLFILEACCESS_API long APIENTRY DllFAOpenFile(LPCWSTR path, DWORD* handle);

我修改过的不用C#代码:

    [DllImport(@"C:\Program Files\Yokogawa Electric Corporation\DllGXFileAccess R2.01.01\DllGXFileAccess.dll", EntryPoint = "DllGXFAOpenFile", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    [return:MarshalAs(UnmanagedType.I4)]
    public static extern int FILE_OPEN([param: MarshalAs(UnmanagedType.LPStr)] string path, [param: MarshalAs(UnmanagedType.U4)] out uint handle);

    private void button1_Click(object sender, EventArgs e)
    {
        long ret;
        string path = textBox1.Text;

        uint handle =0;
        //IntPtr uhandle = new IntPtr(handle);
        ret = FILE_OPEN(path, out handle);
        textBox2.Text = ret.ToString();

    }

我能够编组LPCWSTR。但我无法编组DWORD *句柄。这有什么问题?

2 个答案:

答案 0 :(得分:0)

C ++ long长度为4个字节,即使在64位模式下也是如此。这是I4,而不是I8。 C ++ long对应于C#int。 C#long是64位。

至于handle参数,将其声明为out uint

答案 1 :(得分:0)

答案就是这样,

save({wait: true}).success(function(data){
   console.log(data); //returned data from server
}).error(function(error){
   console.log(error); //error returned from server
});