2008-09-19 90 views
2

我正在使用托管C++实现返回字符串的方法。我使用下面的签名声明该方法在我的头文件:托管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调用,它是通过宏在您的C++项目中用GetWindowTextW进行别名的。

尝试添加#undef GetWindowText到你的C++项目。

0

未托管C++,但C++/CLI用于.net平台。 C++的一组微软扩展,用于他们的.Net系统。

了Bjarne Stroustrup的FAQ http://www.research.att.com/~bs/bs_faq.html#CppCLI

C++/CLI是不是C++,不要将其标记为此类。 Txs

+0

虽然这个问题也适用于“老式”C++,但它只是以不同的方式展示自己(尝试从dll导出一个名为GetWindowText的函数并通过C接口调用它)。 – Eclipse 2008-09-19 18:11:25