【发布时间】:2016-05-23 21:07:23
【问题描述】:
我想调用 MediaInfo.dll 中的一个函数。
函数是:
const wchar_t* __stdcall MediaInfo_Option (void* Handle, const
wchar_t* Option, const wchar_t* Value);
我是这样在c#代码中声明的:
[DllImport("MediaInfo.dll", CharSet = CharSet.Unicode)] internal
static extern string MediaInfo_Option(IntPtr Handle, string OptionString, string Value);
这是调用它的代码:
MediaInfo.MediaInfo_Open(this.h, path);
MediaInfo.MediaInfo_Option(this.Handle, "Complete", "1");
myTextBox.Text = MediaInfo.MediaInfo_Inform(this.h, 0);
MediaInfo.MediaInfo_Close(this.h);
问题是任何使用 .NET Framework 编译的等于或高于版本 4 的 c# 应用程序在调用该函数时都会崩溃。
我该如何解决?
提前致谢。
【问题讨论】:
-
您不能将返回类型声明为 string,pinvoke marshaller 将尝试释放本机字符串的内存,但结果不太可能很好。改用 IntPtr,用 Marshal.PtrToStringUni() 恢复字符串。然后跪下来祈祷你实际上不必松开绳子。
-
您还引用了 64 位版本的 MediaInfo.DLL,它可能是也可能不是您想要的
-
@Hans Passant 谢谢!现在效果很好!
-
@Plutonix 是的,我不应该这样做吗?
标签: c# .net function frameworks mediainfo