请问如何在DELPHI中调用VC写的DLL 运行是没有什么问题,可是我测试到Delphi用了那个DLL却没有执行里面的代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可能是参数传递的问题,找一找c与delphi的变量定义长度,比如c的bool就不是delphi中的boolean,另外要求传递地址的参数是否在delphi的函数参数中加了var标识符,否则肯定不干活的。ps:我有一个pdf是o-pascal与vc和vb变量类型转换的对照表。 //VCDLL.CPP#include "stdafx.h"int __declspec( dllexport ) max_ab(int,int) ;int __declspec(dllexport) GetInfo(int);extern "C" int __declspec(dllexport) GetInfoA(int);extern "C" int _declspec(dllexport) __stdcall GetInfoB(int); BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;}int __declspec( dllexport ) max_ab(int a,int b){return a>b?a:b;}int __declspec(dllexport) GetInfo(int a){ return a*3;}extern "C" int __declspec(dllexport) GetInfoA(int a) { return a+a;}extern "C" int _declspec(dllexport) __stdcall GetInfoB(int a){ return a+a; }//Delphi 测试程序type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; function max_ab(a:integer;b:integer):integer; cdecl;external 'vcdll.dll' index 2; function GetInfo(a:integer):integer;cdecl;external 'vcdll.dll' index 1; function GetInfoA(a:integer):integer;cdecl;external 'vcdll.dll'; function GetInfoB(a:integer):integer;stdcall;external 'vcdll.dll' index 4;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject); var i:integer;begin i:= max_ab(33,22); showMessage(intTostr(i));end;procedure TForm1.Button2Click(Sender: TObject); var i:integer;begin i:=GetInfo(32); showMessage(intTostr(i));end;procedure TForm1.Button3Click(Sender: TObject); var i:integer;begin i:=GetInfoA(12); showMessage(intTostr(i));end;procedure TForm1.Button4Click(Sender: TObject); var i:integer;begin i:=StrtoInt(edit1.Text); i:=GetInfoB(i); showMessage(intTostr(i));end;procedure TForm1.FormCreate(Sender: TObject);beginend;end. Delphi调用VC写的Dll最好用静态调用,动态调用的话返回值会有问题,不知道是为什么。一般默认的编译器使用__cdecl做为参数传送约定,但如果是给Delphi调用的Dll,最好设置为__stdcall,它与pascal的数据类型比较兼容 头快炸了 cxgrid问题 急呀!!!被折磨得要崩溃,请各位给点建设性意见!!!!!!!!!!!!!! 棘手问题: 请教特长无符号整数如何在DBGrid中的正确显示 怎样动态创建ado存储过程控建并使用传参数 紧急求助:如何在datagrid中显示的数据多选? ******紧急紧急,各位MM帅哥好,我有一个关于发送邮件难题... 求助:关于数据导出 制作安装程序问题 非绝顶高手莫入,50分送上 怎样在程序中打开IE? 用installshield作安装程序的时候,怎么样设置才可以做到在桌面上创建应用程序的快捷方式?
ps:我有一个pdf是o-pascal与vc和vb变量类型转换的对照表。
//VCDLL.CPP#include "stdafx.h"int __declspec( dllexport ) max_ab(int,int) ;
int __declspec(dllexport) GetInfo(int);
extern "C" int __declspec(dllexport) GetInfoA(int);
extern "C" int _declspec(dllexport) __stdcall GetInfoB(int);
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
int __declspec( dllexport ) max_ab(int a,int b)
{
return a>b?a:b;
}int __declspec(dllexport) GetInfo(int a)
{
return a*3;
}extern "C" int __declspec(dllexport) GetInfoA(int a)
{
return a+a;
}extern "C" int _declspec(dllexport) __stdcall GetInfoB(int a)
{ return a+a;
}//Delphi 测试程序
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1; function max_ab(a:integer;b:integer):integer; cdecl;external 'vcdll.dll' index 2;
function GetInfo(a:integer):integer;cdecl;external 'vcdll.dll' index 1;
function GetInfoA(a:integer):integer;cdecl;external 'vcdll.dll';
function GetInfoB(a:integer):integer;stdcall;external 'vcdll.dll' index 4;
implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:= max_ab(33,22);
showMessage(intTostr(i));
end;procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
i:=GetInfo(32);
showMessage(intTostr(i));
end;procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
begin
i:=GetInfoA(12);
showMessage(intTostr(i));
end;procedure TForm1.Button4Click(Sender: TObject);
var i:integer;
begin
i:=StrtoInt(edit1.Text);
i:=GetInfoB(i);
showMessage(intTostr(i));end;procedure TForm1.FormCreate(Sender: TObject);
beginend;end.