BOOL  WINAPI funname(char *pFileName,char *pID);
这是C++写的一个DLL里面的函数

我现在想用delphi调用这个函数
静态:
function funname(var pFileName:pchar;var pID:pchar):integer;stdcall; external 'DLLNAME.dll' name 'funname';
动态:
OneHandle := LoadLibrary(DLLNAME.dll'); //动态载入DLL,并返回其句柄 try if oneHandle<>0 then @funname:= GetProcAddress(OneHandle,'funname'); if not( @funname = nil ) then ..... finally FreeLibrary(OneHandle);
现在调试数据不成功
是不是传参问题呢
还是函数在delphi里调用不对
调用应该是成功的
哪位高手帮帮忙
--------------------------------------------------------------------------------
试过了   不行滴说
--------------------------------------------------------------------------------
type TFun = function(FileName: PChar; ID: PChar): BOOL; stdcall; var Func: TFunc; begin Handle := LoadLibrary(DLLNAME.dll'); //动态载入DLL,并返回其句柄 try if Handle > 0 then Func := GetProcAddress(Handle, 'funname'); if Assigned(Func) then Func('MyFileName', 'MyID'); finally FreeLibrary(Handle); end

--------------------------------------------------------------------------------
function funname(pFileName:pchar; pID:pchar):integer; stdcall; external 'DLLNAME.dll' name 'funname';
这样试下,一般char *对应的是PChar,而不是var A: PChar
--------------------------------------------------------------------------------
dll可能不是按照标准顺序调用参数的
--------------------------------------------------------------------------------
先用vc++做个dll,记得声明函数的时候要_stdcall做前缀,例如:
_stdcall int TestC(int i);
_stdcall char* add1(char *s);
然后将此dll放在delphi程序的目录里,在delphi动态引用此dll的某函数的时候,要用cdecl做后缀;例如:
M:function(i:integer):integer;cdecl; M1:function(i:pChar):pChar;cdecl; //-------------------------------------------------------------------------------- function funname(pFileName:pchar; pID:pchar):integer; stdcall; external 'DLLNAME.dll' name 'funname'; //也可以这样试试 function funname(pFileName:pchar;var pID:char):integer; stdcall; external 'DLLNAME.dll' name 'funname'; //-------------------------------------------------------------------------------- delphi中的char *是pansichar //--------------------------------------------------------------------------------

ansean基本把这个问题说清楚了。
1、保证你传递的参数要正确:C++中的char *对应PASCAL中的pchar。
2:C++中导出的函数的参数调用方式要和你DELPHI中的导入的函数参数调用方式要一致!
 例如:    C++的参数调用方式           对应的DELPHI的参数调用方式
           _declspec                              cdecl
           WINAPI,CALLBACK                        stdcall
           PASCAL                                 pascal
我遇到过你同样的问题,后来把STDCALL改为cdecl,问题就解决了,因为我在C++导出函数时使用的是“_declspec(dllexport)”,也就是C参数调用格式。

转载于:https://www.cnblogs.com/xieyunc/archive/2009/04/27/9126715.html

Delphi如何调用C++写的DLL相关推荐

  1. QT调用C#写的Dll

    QT调用C#写的Dll 参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数 ...

  2. c++调用c#写的DLL

    c++调用c#写的DLL: 此文章演示了建立c#的dll: c++建立工程,引入dll: 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必 ...

  3. C# 调用C++写的dll的实现方法

    文章目录 **C# 调用C++写的dll的实现方法** 一. dll的编写 2.C#调用 C# 调用C++写的dll的实现方法 C#调用C++的非托管类的dll其实很简单基本就是固定的调用格式. 一. ...

  4. QT调用C++写的Dll

    C#写的dll是没有dllMain入口函数的,是一种中间语言,需要.Net运行时进行做本地化工作,因此如果要调用C#写的dll,需要依赖.Net运行时,然而Qt中还无法直接调用.Net运行时,最好的方 ...

  5. VC调用C#写的DLL

    From: http://hi.baidu.com/ocnc/blog/item/2c7fc45c1d1f1051fbf2c0ea.html VC中调用C#写的DLL时,对C#这边的DLL有要求,即要 ...

  6. 易语言如何调用c dll文件,易语言调用C++写的DLL

    直接调用会弹出堆栈错误的信息,原因是VS默认是__cdcel方式,而易语言是__stdcall,所以调用约定不一致导致堆栈错误. 解决方案很简单,易语言声明DLL函数时"在库中对应命令名&q ...

  7. c#调用C++写的dll导出类,如何实现

    网上看了一些都是调用c++写函数能不能实现c#使用c++写的类各位高手请赐教 解决方案 » 类的有一个成员函数,是返回这个类的指针,那么在C#里面就是一个INTPTR,它是什么你不用管.然后C++文件 ...

  8. 如何在Delphi 中调用C#生成的DLL类库

    最近需要写一个和给上位机和下位机通讯的接口,而上位机是用Delphi开发的,所以就需要用C#做一类库给Delphi调用 大概步骤: 1.首先在VS2008中新建一个类项目名为TestDelphi,然后 ...

  9. QT 调用vs写的dll 使用OutputDebugString输出调试信息

    vs c++写的dll中使用的cout 将调试信息写到控制台中,但qt调用dll时,cout内容没有办法显示了. 解决办法:使用OutputDebugStringA char buf[128];spr ...

  10. java com dll_通过COM组件方式实现java调用C#写的DLL文件

    通过Java调用C#的DLL文件实现.网上资料很多,自己整合总结了一下,做个备忘. 一.C#写com组件 开发环境 VS2013 1.新建工程:TestDemo(类库项目)     //根据自己需要取 ...

最新文章

  1. sklearn警告:ConvergenceWarning: lbfgs failed to converge (status=1):
  2. OVS DPDK vs OVS Deep Dive(十六)
  3. opencv图像边界的填充
  4. Faster R-CNN教程
  5. Viewpager中改变PagerTabStrip的颜色(背景色,指示条颜色,文字颜色)
  6. 深入解析Windows系统两大进程
  7. mysql中如何删除多个表格_mysql怎么批量删除多个表?
  8. Component template should contain exactly one root element---基于Vue的uniapp手机端_前端UI_uview工作笔记002
  9. 确认无疑,.NET 6是迄今为止最快的.NET
  10. O(N)求出1~n逆元
  11. 什么是3D打印?游戏建模具体怎么做?哪个更有发展
  12. 车身控制器BCM系统框图
  13. 电脑连接热点无internet访问权限_连接wifi后显示无internet访问权限怎么解决
  14. 【ATSC】韩国:2017年将迎来ATSC3.0广播时代
  15. WPS翻译公式之谷歌翻译公式
  16. gromacs 安装_gromacs cpu版安装
  17. CentOS添加管理员账号
  18. C专家编程 第11章 你懂得C,所以C++不再话下 11.1 初识OOP
  19. java 有向图 最短路径算法_java使用Dijkstra算法实现单源最短路径
  20. ACM投稿版权信息去除问题

热门文章

  1. PAT 乙级A1025 适合当算法入门练习题做
  2. 二进制转bcd码c语言程序,微机课设求助 BCD码转换为二进制
  3. 深度学习、机器学习、自然语言处理NLP优秀文章整理
  4. php合成图片系统,php图片合成
  5. 教育部计算机应用基础统考试题,月教育部统考计算机应用基础试卷十附答案.doc...
  6. python socketio web 端_使用flask-socketIO怎样讲json格式数据从服务器推送到前端?
  7. CS231n李飞飞计算机视觉 神经网络训练细节part1下
  8. 第八界中国云计算大会---简单回忆
  9. 【生信进阶练习1000days】day11day12-GEO data mining
  10. android studio for android learning (一)