Delphi如何调用VC写的dll函数?

tyreal68 2007-09-09 10:40:52
Delphi如何调用下面的函数?尤其是CString& 类型如何调用?

动态链接库kmcappdll.dll中:
extern "C" void GetOperationInformation(void *p,int OperationNumber,char *ParameterName,CString& ParameterValue);
获取指定工序的指定参数信息。
*P:接口1获得的指针
OperationNumber:第几个工序;
ParameterName:要获取的工序参数名称:
ParameterValue:返回值,表示获取的工序参数内容:
例如:
GetOperationInformation(p,5,“工序名称”,ParameterValue);
表示获取第5道工序的工序名称,获取的内容存放至ParameterValue;
...全文
167 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
UnkownState 2007-09-12
  • 打赏
  • 举报
回复
和调用delphi写的dll一样,只是注意数据类型
lxtnt 2007-09-11
  • 打赏
  • 举报
回复
第一、你得确定你导出来的函数全都正确!用PE分析器一下!

第二、InitKmcappDoc与GetOperationNumber是在一起连用的吗?意思是其返的是指针,所以其数据类型不可以随便肯定。
GetGxkHeadInformation的定义形式不一定正确(数据类型)有一点资料最好,没有就函数分析器看一下.

第三、你的函引用有问题(在代码中不是这样吧?):
Function InitKmcappDoc(sFileName:Pchar):Pointer;stdcall; external 'kmcappdll.dll ';
name 'InitKmcappDoc';

Index 65;
但不能注释掉。// name 'InitKmcappDoc ';


tyreal68 2007-09-10
  • 打赏
  • 举报
回复
comanche:
这是武汉开目公司商品软件中的二次开发接口,我们买开目软件5年了,这次要将工艺系统集成到我们自己的管理系统中,所以在进行二次开发
comanche 2007-09-10
  • 打赏
  • 举报
回复
CString,,~哪个白吃写的 dll, delphi 没有这个类型, 要我说是不能用的
tyreal68 2007-09-10
  • 打赏
  • 举报
回复
谢谢lxtnt回复
不好意思,再请问一下

Button2Click如下操作能运行,但是
p:=InitKmcappDoc(PChar(edit1.Text));
edit2.Text:=IntToStr(GetOperationNumber(p));
会出现内存错误

另外这句也出错
GetGxkHeadInformation(InitKmcappDoc(PChar(edit1.Text)),'工令号',Pointer(ParameterValue));
能再次指点一下吗?
谢谢



我的实际代码如下:

Function InitKmcappDoc(sFileName:Pchar):Pointer;stdcall; external 'kmcappdll.dll ';// name 'InitKmcappDoc ';
Function GetOperationNumber(P:Pointer):integer;stdcall; external 'kmcappdll.dll ';// name 'GetOperationNumber '; // 获得当前工艺的工序数。入口参数为接口1获得的指针;
Procedure GetOperationInformation(P:Pointer; OperationNumber:Integer; ParameterName:Pchar; ParameterValue:PString);stdcall; external 'kmcappdll.dll ';// name 'GetOperationInformation ';
Procedure GetGxkHeadInformation(P:Pointer; ParameterName:Pchar; ParameterValue:PString);stdcall; external 'kmcappdll.dll ';// name 'GetGxkHeadInformation ';
//更改表头信息。例如: SetGxkHeadInformation(p,“零件图号”,“123”); 表示更改工艺文件的零件图号为123。
Procedure SetGxkHeadInformation(P:Pointer; ParameterName:Pchar; ParameterValue:PString);stdcall; external 'kmcappdll.dll ';// name 'SetGxkHeadInformation ';
Procedure SaveCappContent(P:Pointer; sFileName:Pchar);stdcall; external 'kmcappdll.dll ';// name 'SaveCappContent ';


{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
p:Pointer;
ParameterValue:String;
begin
p:=InitKmcappDoc(PChar(edit1.Text));
SetLength(ParameterValue,255);
GetGxkHeadInformation(InitKmcappDoc(PChar(edit1.Text)),'工令号',Pointer(ParameterValue));
edit2.Text:=ParameterValue;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if self.OpenDialog1.Execute then edit1.Text:=self.OpenDialog1.FileName;
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
p:Pointer;
ParameterValue:String;
begin
p:=InitKmcappDoc(PChar(edit1.Text));
edit2.Text:=IntToStr(GetOperationNumber(InitKmcappDoc(PChar(edit1.Text))));
end;
lxtnt 2007-09-09
  • 打赏
  • 举报
回复
Procedure GetOperationInformation(
P:Pointer;
OperationNumber:Integer;
ParameterName:Pchar;
ParameterValue:PString);
stdcall; external 'kmcappdll.dll' name 'GetOperationInformation';

Var
ParameterValue:String;
begin
SetLength(ParameterValue,255);
GetOperationInformation(p,5,'工序名称',Pointer(ParameterValue));
end;

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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