C# импорт метода из Dll написанной на C++
Формулировка задачи:
Всем привет! Вот какая проблема. Нужно вызвать метод из Dll написанный на c++.
Вот как выглядит его прототип:
Долго разбираясь я перевел его в приемлимый вид для C# и сделал импорт:
вызываю его вот так:
Первые два аргумента работают верно, то есть идентификатор и версия там внутри метода сравниваются и выдают положительный результат. Третий аргумерт не требуется в использовании и я его не трогаю. Пятый тоже работает исправно. В результате выполнения данного метода в четвертый аргумент возвращается указатель на указатель на интерфейс. То есть там внутри создается объект и к нам возвращается указатель на указатель на этот объект.
Вот из этого объекта мне нужно получить этот интерфейс чтобы вызвать из него другой метод, но при попытке сделать следующее:
вываливается исключение:
Сам вопрос: Как мне получить из этого указателя объект? Пробовал описывать сам интерфейс но получается такое же исключение. Что делать?
Листинг программы
- USTEXPORT USTFUNC UstCreateRootObject (REFGUID id, uint64 version, ILogger *logger, IPnm **dst, uint *error)
Листинг программы
- [DllImport("HwKeyChk.dll")]
- public unsafe static extern bool UstCreateRootObject(ref Guid id, Int64 version, void* logger, ref void** Pnm, ref uint error);
Листинг программы
- void** n = null;
- uint error = 0;
- bool rel = UstCreateRootObject(ref PNM_API_ID, PNM_API_VERSION, null, ref n, ref error);
Листинг программы
- IntPtr ptr = new IntPtr(*n);
- object Key = Marshal.GetObjectForIUnknown(ptr);
Неопознанная ошибка (Исключение из HRESULT: 0x80004005 (E_FAIL))
Решение задачи: «C# импорт метода из Dll написанной на C++»
textual
Листинг программы
- interface IShow
- {
- void ShowMsg();
- }
- class Show : IShow
- {
- string r;
- public Show(string res)
- {
- r = res;
- }
- public void ShowMsg()
- {
- MessageBox.Show(r);
- }
- }
- ...
- Show d = new Show("Здесь текст.");
- IntPtr hD = Marshal.GetIUnknownForObject(d); // но по условию у нас уже есть указатель.
- IShow show = (IShow)Marshal.GetObjectForIUnknown(hD);
- show.ShowMsg(); // Здесь текст.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д