求教仍然是VC++调用外部函数中的函数问题

伍戈123 2013-05-14 05:06:21
"C++" FUNCTION REAL enth
(
OUT REAL press , --absolute pressure
OUT REAL tem , --temperature in Centigrades
OUT REAL qual , --quality
IN STRING fluid fluidname
)
如上这个函数,是外部一个函数库中的一个函数,前边“C++”说明是C++编译的,但是如果我用VC++6.0调用这个函数的话,我该如何写呢?这个貌似是在fortran语言写的。我这样声明的:extern "C"{float _stdcall ENTH(float *press,float *tem,float *qual,char *A);}
但是老是提示error LNK2001: unresolved external symbol _ENTH@16 不知道如何解决?谢谢
...全文
144 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-05-16
  • 打赏
  • 举报
回复
引用 11 楼 u010445844 的回复:
[quote=引用 9 楼 zhao4zhong1 的回复:] [quote=引用 8 楼 u010445844 的回复:] [quote=引用 7 楼 michael2988 的回复:] 你库函数定义时的调用约定和你实际调用时的是否一致
我不知道库函数内部是如何写的。不知道如何约定的。按照他的语言规则应该是C++的约定。或者fortran的约定,但是我都试过了老是提示 unresolved external symbol "double __stdcall ENTH(double *,double *,double *,char *)" (?ENTH@@YGNPAN00PAD@Z)[/quote] 不知道你不会用PEBrowse Professional软件反汇编看吗?[/quote] 这个真不会啊,下了个软件,但是看不懂啊,不知道杂用,能给点指导不?谢谢了[/quote] 我email:zhao4zhong1@163.com,有偿服务。
伍戈123 2013-05-16
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
[quote=引用 8 楼 u010445844 的回复:] [quote=引用 7 楼 michael2988 的回复:] 你库函数定义时的调用约定和你实际调用时的是否一致
我不知道库函数内部是如何写的。不知道如何约定的。按照他的语言规则应该是C++的约定。或者fortran的约定,但是我都试过了老是提示 unresolved external symbol "double __stdcall ENTH(double *,double *,double *,char *)" (?ENTH@@YGNPAN00PAD@Z)[/quote] 不知道你不会用PEBrowse Professional软件反汇编看吗?[/quote] 这个真不会啊,下了个软件,但是看不懂啊,不知道杂用,能给点指导不?谢谢了
赵4老师 2013-05-15
  • 打赏
  • 举报
回复
对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行!
赵4老师 2013-05-15
  • 打赏
  • 举报
回复
引用 8 楼 u010445844 的回复:
[quote=引用 7 楼 michael2988 的回复:] 你库函数定义时的调用约定和你实际调用时的是否一致
我不知道库函数内部是如何写的。不知道如何约定的。按照他的语言规则应该是C++的约定。或者fortran的约定,但是我都试过了老是提示 unresolved external symbol "double __stdcall ENTH(double *,double *,double *,char *)" (?ENTH@@YGNPAN00PAD@Z)[/quote] 不知道你不会用PEBrowse Professional软件反汇编看吗?
伍戈123 2013-05-14
  • 打赏
  • 举报
回复
引用 7 楼 michael2988 的回复:
你库函数定义时的调用约定和你实际调用时的是否一致
我不知道库函数内部是如何写的。不知道如何约定的。按照他的语言规则应该是C++的约定。或者fortran的约定,但是我都试过了老是提示 unresolved external symbol "double __stdcall ENTH(double *,double *,double *,char *)" (?ENTH@@YGNPAN00PAD@Z)
michael2988 2013-05-14
  • 打赏
  • 举报
回复
你库函数定义时的调用约定和你实际调用时的是否一致
always_learn 2013-05-14
  • 打赏
  • 举报
回复
不要"C" 加上"C"是对你的函数申明按照C的约定签名 然后实际上函数的定义的时候是C++约定 编译器就找不到你的函数定义
伍戈123 2013-05-14
  • 打赏
  • 举报
回复
引用 4 楼 michael2988 的回复:
_stdcall 就是调用约定
我写明调用约定了,extern "C"{float _stdcall ENTH(float *press,float *tem,float *qual,char *A);} 别的函数是可以的。这个不行,是不是“C”不必写呢?如果是VC++调用外部的C++函数库就只需声明extern一下就行呢
michael2988 2013-05-14
  • 打赏
  • 举报
回复
_stdcall 就是调用约定
伍戈123 2013-05-14
  • 打赏
  • 举报
回复
引用 1 楼 ouyh12345 的回复:
用LoadLibrary和GetProcAddress来动态加载
呃,忘了说了,我是调用外部的.lib静态库中的函数。我其实也加载了库函数,只是这个函数格式不知道跟C++如何匹配才能被调用呢?C++基础不扎实,所以问一下
michael2988 2013-05-14
  • 打赏
  • 举报
回复
应该是相应的库的导出函数的名字改编问题,如果可以更改库的放最好使用DEF文件导出,如果不能,函数的调用约定必须与库函数一致。。。
ouyh12345 2013-05-14
  • 打赏
  • 举报
回复
用LoadLibrary和GetProcAddress来动态加载

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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