2016-02-12 3 views
1

Я хотел бы вызвать функцию внутри MediaInfo.dll.Импорт функции dll C++ в C#

Функция:

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

Проблема в том, что любое приложение C#, скомпилированное с .NET Framework, равное или большее, чем ошибка версии 4 при вызове tha t.

Как это можно решить?

Заранее благодарен.

+0

Вы не можете объявить возвращаемый тип как * string *, маркерщик pinvoke попытается освободить память для родной строки, и это вряд ли получится. Вместо этого используйте IntPtr, восстановите строку с помощью Marshal.PtrToStringUni(). И опуститесь на колени и помолитесь, что вам действительно не нужно выпускать нитку. –

+0

вы также ссылаетесь на 64-битную версию MediaInfo.DLL, которая может быть или не быть тем, что вы хотите – Plutonix

+0

@Hans Passant Спасибо! Теперь он работает хорошо! –

ответ

Смежные вопросы