Почему исключение произошло в LoadTypeLibEx System.ArgumentException: значение не попадает в ожидаемый диапазон? - PullRequest
1 голос
/ 07 июня 2010

Я загружаю библиотеку типов в C ++ / CLI. В C # он успешно загружается, но снова и снова выдает следующее исключение в управляемом C ++ / CLI.

Исключительная ситуация в LoadTypeLibEx System.ArgumentException: значение не падает в ожидаемом диапазоне

at LoadTypeLib (String strTypeLibName, ITypeLib typeLib)

Вот подпись PInvoke:

[DllImport("oleaut32.dll", CharSet = CharSet::Unicode, PreserveSig = false)]
static void LoadTypeLib(String^ strTypeLibName, [MarshalAs(UnmanagedType::Interface)] [Out] System::Runtime::InteropServices::ComTypes::ITypeLib^ typeLib);

Мой код:

ITypeLib^ oTypeLib;
LoadtypeLib(TLB, oTypeLib);

Я застрял здесь. Пожалуйста, дайте мне способ избавиться от этого исключения.

С уважением Усман

1 Ответ

1 голос
/ 11 июня 2010

В C ++ / CLI обычно требуется вызывать функции API с использованием прототипа из открытого заголовочного файла, а не путем написания объявления p / invoke самостоятельно. Компилятор будет использовать взаимодействие C ++ или p / invoke в зависимости от того, используете ли вы / clr или /clr:pure.

В любом случае вторым аргументом должен быть переход по ссылке. В C # это будет использовать ключевое слово out. В C ++ / CLI синтаксис для аргумента out:

void func([Out] Type% arg1);

В вашем случае, возможно

static void LoadTypeLib(String^ strTypeLibName, [Out] ComTypes::ITypeLib^% typeLib);
...