我想导入这样的函数:
[return: MarshalAs(UnmanagedType.LPWStr)] [DllImport("DLL.dll",EntryPoint="FuncUtf16",ExactSpelling=true,PreserveSig=true,CharSet=CharSet.Unicode)] public static extern string Func();
“Windows在Test.exe中触发了断点.这可能是由于堆的损坏,这表明Test.exe或其加载的任何DLL中存在错误.”
当我反复按“继续”时,该功能确实给出了预期的输出.但是,当我有机会上述声明时:
[DllImport("DLL.dll",CharSet=CharSet.Unicode)] public static extern IntPtr Func();
(将返回类型更改为IntPtr)并按如下方式调用它:
Dim a As IntPtr = Func() Dim Str As String = Runtime.InteropServices.Marshal.PtrToStringUni(a)