2016-02-12 105 views
1

我想調用MediaInfo.dll中的函數。在C中導入C++ dll函數#

功能是:

[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); 

const wchar_t*  __stdcall MediaInfo_Option (void* Handle, const 
wchar_t* Option, const wchar_t* Value); 

我在這樣的C#代碼中聲明它問題在於,調用該func時,.NET Framework編譯的任何c#應用程序等於或大於版本4崩潰灰。

我該如何解決?

在此先感謝。

+0

您無法將返回類型聲明爲* string *,pinvoke編組將嘗試釋放內存以獲得本機字符串,而且這種情況不太可能發生。改用IntPtr,用Marshal.PtrToStringUni()恢復字符串。然後跪下來祈禱你實際上不必釋放繩子。 –

+0

你也在參考MediaInfo.DLL的64位版本,它可能會或可能不是你想要的 – Plutonix

+0

@Hans Passant謝謝!現在效果很好! –

回答