-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在Windows上编写DLL时不能使用中文命名 #74
Comments
请有windows开发经验的看看? |
尝试根据官方文档创建dll并调用, 但未重现问题. MathLibrary.cpp中新添中文名接口:
MathClient.cpp中新添:
运行输出:
先问问报告者可否分享测试代码. |
用GCC、clang试了吗?这应该是编译器实现的问题,不是系统层面的问题。 |
@swizl 上面的中文命名用vs编译运行是成功的. 所以最好拿到报告者的测试代码, 再尝试复现. |
已演示在对DLL库中的接口进行中文命名. 如发现新问题请重开此贴. |
用户回馈, 静态调用确定没有问题. 但GetProcAddress不能获取方法指针. |
个人暂不打算继续研究. 如发现实例需求或有兴趣探索请重开此贴. |
https://zhuanlan.zhihu.com/p/30529835 文后最新评论报告此问题. 需研究影响与对策.
参考:
GetProcAddress官方文档
有一个事实直接反对在Windows上编写DLL时使用中文命名。
<<Windows核心编程第五版>>(中文版)Page 532
说:
"注意:参数pszSymbolName
...
这是因为编译器/链接器始终都是将符号的名称以ANSI字符串的形式保存的"
于是在编写DLL时导出的符号名一定不能用中文。
由于这书是多年以前的,我还亲自做了实验。
实验环境是
VS2017 Version 15.7
Windows10 Pro x64 1803
Visual C++
实验表明,用中文命名的导出符号无法以符号名的形式被导入,无论是动态还是静态。
虽然这个事实只是针对DLL,但DLL是Windows最重要的组成部分之一。
The text was updated successfully, but these errors were encountered: