2008-09-19 2 views
2

Я использую управляемый C++ для реализации метода, который возвращает строку. Я объявляю метод в моем файле заголовка, используя следующую подпись:Managed C++ Именование метода

String^ GetWindowText() 

Однако, когда я использую этот метод из C#, подпись:

string GetWindowTextW(); 

Как избавиться от дополнительная «W» в конце имени метода?

ответ

2

Чтобы обойти препроцессора повозка, запряженная волами из заголовочных файлов для Windows, объявить его следующим образом:

#undef GetWindowText 
String^ GetWindowText() 

Обратите внимание, что, если вы на самом деле использовать Win32 или MFC GetWindowText() подпрограмм в коде, вам нужно либо переопределите макрос, либо назовите их как GetWindowTextW().

+0

А теперь я понимаю. Проблема в том, что я использую заголовочный файл, который переопределяет GetWindowText() как GetWindowTextA(). Я полностью пропустил это. Благодаря! – Karl 2008-09-19 16:24:51

0

GetWindowText - это вызов win32 api, который вызывается с помощью макроса GetWindowTextW в вашем проекте на C++.

Попробуйте добавить #undef GetWindowText к проекту на C++.

0

Не управляемый C++, но C++/CLI для платформы .net. Набор расширений Microsoft для C++ для использования с их .Net-системой.

FAQ Бьярне Страуструпа http://www.research.att.com/~bs/bs_faq.html#CppCLI

C++/CLI не C++, не пометить его как таковой. Txs

+0

Хотя эта проблема применима и к «старомодному» C++, она просто проявляется по-разному (попробуйте экспортировать функцию, называемую GetWindowText из DLL и вызывая ее через интерфейс C). – Eclipse 2008-09-19 18:11:25

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