Я хотел бы вызвать функцию внутри 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.
Как это можно решить?
Заранее благодарен.
Вы не можете объявить возвращаемый тип как * string *, маркерщик pinvoke попытается освободить память для родной строки, и это вряд ли получится. Вместо этого используйте IntPtr, восстановите строку с помощью Marshal.PtrToStringUni(). И опуститесь на колени и помолитесь, что вам действительно не нужно выпускать нитку. –
вы также ссылаетесь на 64-битную версию MediaInfo.DLL, которая может быть или не быть тем, что вы хотите – Plutonix
@Hans Passant Спасибо! Теперь он работает хорошо! –