2 lufang xy73 lufang_xy73 于 2016.03.26 14:21 提问

求教个delphi调用DLL的函数说明怎么写

函数名 ZtDevice_CR_ReadTrack3
出口参数 byTrackDataThree BYTE * 3
出口参数 nDataThreeLen INT *

入口参数 nTimeOut INT
返回值 short

我的声明
unction ZtDevice_CR_ReadTrack2(out byTrackDataTwo:pBYTE; out nDataTwoLen:Integer;nTimeOut:integer):integer;stdcall;external 'CardReader.dll';

调用方法
procedure TForm3.Button1Click(Sender: TObject);
var
dddd:pbyte;
cccc:integer;
ip:Integer;
begin
cccc:=ZtDevice_CR_Open(1,9600);
if cccc=1 then
begin
ip:=50;
GetMem(dddd,50);
ZtDevice_CR_ReadTrack2(dddd,ip,6);
end;

    为啥一调用ZtDevice_CR_ReadTrack2就报内存错误?

3个回答

caozhy
caozhy   Ds   Rxr 2016.03.26 22:18

ip不对,你函数中应该传ip的指针,而不是ip的值,否则函数往50这个地址上一写,肯定就错了。

lufang_xy73
lufang_xy73   2016.03.28 09:15

function ZtDevice_CR_ReadTrack2(out byTrackDataTwo:pBYTE; out nDataTwoLen:pInteger;nTimeOut:integer):integer;stdcall;external 'CardReader.dll';

调用方法
procedure TForm3.Button1Click(Sender: TObject);
var
dddd:pbyte;
cccc:integer;
ip:pInteger;
begin
cccc:=ZtDevice_CR_Open(1,9600);
if cccc=1 then
begin
ip^:=50;
GetMem(dddd,50);
ZtDevice_CR_ReadTrack2(dddd,ip,6);
end;

也不行啊
应该怎么写啊,求指导

CSDNXIAOD
CSDNXIAOD   2016.03.30 11:25

Delphi如何调用C++写的DLL
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Delphi中DLL两种调用方式的比较
摘要:本文阐述了Windows环境下动态链接库的概念和特点,对静态调用和动态调用两种调用方式作出了比较,并给出了Delphi中应用动态链接库的实例。 一、动态链接库的概念 动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是dll,也有可能是drv、sys和fon,它和
Delphi中如何把函数代码调出主程序,写到“DLL”中并调用
一、开使你的第一个DLL专案 1.File->Close all->File->New[DLL] 代码: //自动产生Code如下 library Project2; //这有段废话 uses SysUtils, Classes; {$R *.RES} begin end. 2.加个Func进来: 代码:
Delphi DLL使用接口和调用的方法
Delphi对接口采用引用计数的方法管理对象生命周期,但是DLL中输出的对象可能不是被Delphi调用,其引用计数不一定正确,因此DLL中接口对象的生命周期不由Delphi编译器自动生成的代码管理,而是程序员自己控制,所以上面 的工厂包括构造和解析两个接口对象的生命周期管理方法。 所有接口对象应该集成自下面的接口,而不应该继承自Delphi自带的TInterfacedObject:
delphi 调用c/c++函数dll的坑
小知识C++中以&的参数在Delphi必须以const或者var申明,否则会产生错误。WIN32PROJECT1_API void test8(RECT &a) { a.left = 1; a.top = 2; a.right = 3; a.bottom = 4; } 此时参数为 RECT &a,在Delphi中有两种申明方式,各有不同 方式一 var procedur
Delphi调用C写的dll
一.用C语言写了一个Dll,编译成功。 是一个非常简单的加密算法,代码如下: #include __declspec(dllexport) void Encipher(char a[16])    {  int i,len;  int s=1;       len=strlen(a);  for(i=0;i  {   a[i]=a[i]+s;   s=s+2;  }    
Delphi调用C++编写的动态链接库dll的方法
首先我们先看一下普通Delphi调用动态链接库dll的方法: {===================静态调用DLL函数===================} //首先声明这个DLL中的函数,然后就可以直接调用了 function AddNum(Num1,Num2:integer):integer;stdcall;external 'project1.dll' name '
Delphi中调用VC编写的DLL内对象
Delphi以其独特的面向控件的开发方式、强大的数据库功能以及快速的编译技术,使得它自发布起即格外引人注意。随着Delphi 3提供丰富的Internet应用,Delphi日益成为最重要的软件开发工具之一, 它吸引了许多原Visual Basic、Foxpro、dBase甚至C++的程序员,而这些程序员使用Delphi时需要解决的一个重要问题就是怎样利用他们原有的代码。本文将介绍Delphi与C+
Delphi环境中编写调用DLL的方法和技巧
第一章 为什么要使用动态链接库(DLL) top 提起DLL您一定不会陌生,在Windows中有着大量的以DLL为后缀的文件,它们是保证Windows正常运行和维护升级的重要保证。(举个例子,笔者的Win95 System目录下尽有500多个DLL文件。)其实,DLL是一种特殊的可执行文件。说它特殊主要是因为一般它都不能直接运行,需要宿主程序比如*.EXE程序或其他DLL的动态调用才能够使用。简单
java 调用delphi写的dll的全套资料,可运行
java 调用delphi写的dll的全套资料,可运行
用Delphi编写Dll心得
使用Delphi编写DLL心得1。每个函数体(包括exports和非exports函数)后面加 stdcall;, 以编写出通用的dll2。exports函数后面必须加export;(放在stdcall;前面)3。对于非exports函数可以使用string类型,而且建议使用string类型进行参数传递4。对于exports函数请使用PChar类型做参数传递5。如果exports调用其