DLL编译问题

daojianrm 2008-05-10 04:39:06
void CWinDialog::OnBtnChilun()
{
// TODO: Add your control notification handler code here
PRO_DESIGN_edit_exp("z",30);此处出现问题

}
error C2664: 'PRO_DESIGN_edit_exp' : cannot convert parameter 1 from 'char [2]' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
请问这是什么问题,等待大家的帮助
...全文
132 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
引力场变动源 2008-05-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 daojianrm 的回复:]
这个函数已经在.C文件中声明了extern "C" int _declspec(dllimport) PRO_DESIGN_edit_exp(char,double);
做了导入声明,调用DLL,这样定义可不可以啊,还需不需要其他的声明
[/Quote]

但是编译器说找不到的函数的名字是这个啊:"__imp__PRO_DESIGN_edit_exp"
daojianrm 2008-05-11
  • 打赏
  • 举报
回复
高手们帮忙啊
daojianrm 2008-05-11
  • 打赏
  • 举报
回复
这个函数已经在.C文件中声明了extern "C" int _declspec(dllimport) PRO_DESIGN_edit_exp(char,double);
做了导入声明,调用DLL,这样定义可不可以啊,还需不需要其他的声明
引力场变动源 2008-05-11
  • 打赏
  • 举报
回复
"__imp__PRO_DESIGN_edit_exp"

这个函数在哪里呢?提示说是这个函数没有定义,是不是没有正确的包含头文件,或者是函数已经声明但是没有定义?
daojianrm 2008-05-11
  • 打赏
  • 举报
回复
补充一下,这个DLL调用的函数是实现UG二次开发的改变表达式的功能,函数原型是
int PRO_DESIGN_edit_exp(char *dim_name,double dim_value)
{
char exp[256],temp[50];
int err;

strcpy(exp,dim_name);
strcat(exp,"=");
sprintf(temp,"%.5f",dim_value);
strcat(exp,temp);
err=UF_MODL_edit_exp(exp);
return err;
}
我想把它做成DLL,在主程序中调用,那位高手同时对UG的二次开发编程了解也请给予指教!
引力场变动源 2008-05-11
  • 打赏
  • 举报
回复
应该是两个不同的函数吧,前一个函数有声明但是没有定义,但是代码里面却有对那个函数的调用,所以就会出现那个链接错误。
光是使用extern "C" int _declspec(dllimport) PRO_DESIGN_edit_exp(char,double); 作导入声明是不够的,还需要引入相关的头文件和函数所在的库文件才行,你现在的问题应该是没有引入库文件吧,所以可能需要在编译器的菜单中选择"项目->属性”打开属性配置对话框,然后选择“配置属性->链接器->输入",在附加依赖项中填写那个函数所在的库文件的文件名。

库文件应该放在程序的生成目录下,或者在“配置属性->链接器->常规->附加库目录”中指定的目录下,或者也可以设置VC的环境变量。
daojianrm 2008-05-11
  • 打赏
  • 举报
回复

"__imp__PRO_DESIGN_edit_exp" 和“PRO_DESIGN_edit_exp()”是什么关系啊,前一个函数我并没有定义,如果和第二个函数没关系的话也不需要用到,为什么需要定义呢
daojianrm 2008-05-10
  • 打赏
  • 举报
回复
已按LS的方法改过了,有提示error LNK2001: unresolved external symbol __imp__PRO_DESIGN_edit_exp
这事怎么回事啊,还要麻烦大家
loneleon 2008-05-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Silenker 的回复:]
同1楼的,"z"的双引号改成单引号就可以了。
双引号是字符串,包含那个字符已经编译器自动添加的'\0',结果就变成了2个字符了,而参数要求的是1个字符,所以需要把双引号改成单引号。
[/Quote]
引力场变动源 2008-05-10
  • 打赏
  • 举报
回复
同1楼的,"z"的双引号改成单引号就可以了。
双引号是字符串,包含那个字符已经编译器自动添加的'\0',结果就变成了2个字符了,而参数要求的是1个字符,所以需要把双引号改成单引号。
liwenrui2008 2008-05-10
  • 打赏
  • 举报
回复
提示说了,第一个参数类型不对。要用一个类型转换 reinterpret_cast,a C-style cast or function-style cast。
abomber2 2008-05-10
  • 打赏
  • 举报
回复
PRO_DESIGN_edit_exp('z',30);此处出现问题

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧