关于网友提出的“ 自己用COM工程写DLL的时候函数名和VC本身的CreatWindow函数名重名冲突怎么办”问题疑问,本网通过在网上对“ 自己用COM工程写DLL的时候函数名和VC本身的CreatWindow函数名重名冲突怎么办”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 自己用COM工程写DLL的时候函数名和VC本身的CreatWindow函数名重名冲突怎么办
描述:win32vccomDLLc
要用COM工程写一个DLL来提供一些函数方法 要求中有一个函数名是CreatWindow 而VC里面本身就有CreatWindow函数 两个名字冲突了 编译就会提示错误
linedisplay.h(145) : warning C4003: not enough actual parameters for macro 'CreateWindowW'
linedisplay.h(145) : error C2059: syntax error : 'constant'
PS:要求里面CreatWindow的函数形式是
CreateWindow([in] long ViewportRow, [in] long ViewportColumn, [in] long ViewportHeight, [in] long ViewportWidth, [in] long WindowHeight, [in] long WindowWidth, [out, retval] long* pRC );
之前查网上说在头文件里加入
#if defined(CreateWindow) // If Win32 defines "CreateWindow":
#undef CreateWindow // Undefine it to avoid conflict
#endif // with the line display method.
这三行语句 但是我加入了之后还是会提示上面的错误
求大神指教啊.......
解决方案1: 快下班了,实在不行,把你写的activeX发到俺的邮箱,晚上回去帮你看看。
mac.mac@163.com
解决方案2: 你这个dll里的CreatWindow 参数都和系统的不一样的吧? 怎么会冲突? 不会是你代码敲错了吧...
解决方案3: 把你的 IDL 里面的 CreateWindow 修改为 其他的名字。在编译 IDL 的时候,添加一个宏定义,比如 CreateWindow=MyCreateWindow
在你的程序你用这个其他的名字调用。
因为 接口不要求名字。
至于 CreateWindow 为什么会这样,是因为你的VC++版本高的原因。
原来的 CreateWindowW(A) API 已经不参与编译了,使用 CreateWindowW(A) 宏的原因。
以前使用 CreateWindow, 那么编译的时候会直接生成 CreateWindowW,这是个 API,但是 VC++升级后,这是一个宏了。
以上介绍了“ 自己用COM工程写DLL的时候函数名和VC本身的CreatWindow函数名重名冲突怎么办”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3501571.html