Вызов функции из проекта Win32 .lib с / clr из проекта, который является чистым проектом Win32, без clr - PullRequest
1 голос
/ 22 октября 2010

Я хочу знать, как точно вызвать функцию из ProjectA :: ClassA :: FuncA (), которая является Win32 .lib с / clr из ProjectB :: ClassB :: FuncB (), которая не имеет поддержки clr и это чистый проект Win32. Оба эти проекта находятся под одним и тем же решением.

Во-первых, вот что я попробовал: 1. Создал ProjectA с помощью .lib 2. Добавлен путь .lib к свойствам ProjectB (в компоновщике: Input: Add.Dependencies) 3. Я добавил .h для .lib, созданного ProjectA в ProjectB 4. Создал объект для ProjectA :: ClassA в ProjectB :: ClassB и попытался вызвать FuncA ().

Я получаю следующую ошибку:

Ошибка 1 ошибка LNK2019: неразрешенный внешний символ "public: static void __cdecl ClassA :: FuncA (void)" (? FuncA @ ClassA @@ SAXXZ), на который ссылается функция "public: static void __cdecl ClassB :: FuncB (void) "(? FuncB @ ClassB @@ SAXXZ) Helper.obj

Я успешно использую сторонние .lib в ProjectB. Я следую тому же процессу, но он терпит неудачу; единственное отличие заключается в том, что ProjectA () поддерживает CLR.

Я что-то упустил? Пожалуйста, просветите меня; -)

Спасибо!

1 Ответ

1 голос
/ 22 октября 2010

Собственный код может вызывать управляемый код, но это нужно сделать в файле исходного кода, который скомпилирован с / clr. Вам нужен маленький класс адаптера, который является родным (без «ref») в ProjectB. Если это методы экземпляра, вам понадобится gcroot <> в адаптере для хранения ссылки на управляемый класс.

...