我有一个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 *句柄。这有什么问题?
答案 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
});