穿
穿红衣服的小黄
Unregistered / Unconfirmed
GUEST, unregistred user!
首先,我想实现的目标是 建一个能返回自身绝对路径的dll文件,供别人调用,获得dll自身的绝对路径(不是通过别过告诉它).
以下是我自己试着弄的 dll 编译环境 WINXP SP2 + DELPHI7.0
library getpath;
uses
SysUtils,windows,
Classes;
{$R *.res}
function GETDPATH : string ; stdcall
var
path:STRING;
module:hmodule;
buf:array[0..255] of char;
n:integer;
begin
//path:=nil;
module := GetModuleHandle('getpath.dll');
GetModuleFileName(module, buf, sizeof(buf));
for n:=0 to 255 do
begin
path:=path+buf[n];
end;
result:=path;
end;
exports
GETDPATH;
begin
end.
然后又弄了个 exe 去试着调用看结果 (一个edit 一个 button) 如下
function GETDPATH():string;stdcall
external 'getpath'
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:= getdpath;
end;
end.
但是点击按钮后,老是报错 ,错误内容 "invalid pointer operation"
edit 里又能得到正确的路径.
这个dll 是想供一个 BI工具去调用
该BI工具 有一个dll 函数可以加载外部dll文件
DLL(P1;P2;P3) P1为dll文件名 p2 为dll中需调用的函数名 P3为 返回值和输入值类型
如 dll("getpath";"getdpath";"BD" = 参数类型 D 返回值类型 B P3的内容如下
Code Description Input via C-Declaration
-----------------------------------------------------------------------------
A Boolean value (0=False, 1=True) Value short int
B 8-Byte floating point number Value (Windows) double
C String with 0 as delimiter Reference char
(max. length = 255 characters)
D String with a byte counter Reference unsigned char
(the first byte indicates the length;
max. length = 255 characters)
E 8-Byte floating point number Reference double
H Two byte unsigned integer Value unsigned short int
I Two byte signed integer Value short int
J Four byte signed integer Value long int
M Two byte signed integer Reference short int
N Four byte signed integer Reference long int
------------------------------------------------------------------------------
在dll被 测试EXE调用 报错后,找不到解决的办法,然后在对应的 A-N代码中有找不到合适
的返回值类型,几个都试过了(如 dll("getpath";"GETDPATH";"D" ) ,都报内部错误,
想请各位能给整理下我的 dll文件代码 和 调用EXE 看是什么原因报错
然后找找 在 BI 里调用 该用什么返回值类型好,并相应的改改 DLL 代码
谢谢各位了!!!
谢谢!!
以下是我自己试着弄的 dll 编译环境 WINXP SP2 + DELPHI7.0
library getpath;
uses
SysUtils,windows,
Classes;
{$R *.res}
function GETDPATH : string ; stdcall
var
path:STRING;
module:hmodule;
buf:array[0..255] of char;
n:integer;
begin
//path:=nil;
module := GetModuleHandle('getpath.dll');
GetModuleFileName(module, buf, sizeof(buf));
for n:=0 to 255 do
begin
path:=path+buf[n];
end;
result:=path;
end;
exports
GETDPATH;
begin
end.
然后又弄了个 exe 去试着调用看结果 (一个edit 一个 button) 如下
function GETDPATH():string;stdcall
external 'getpath'
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:= getdpath;
end;
end.
但是点击按钮后,老是报错 ,错误内容 "invalid pointer operation"
edit 里又能得到正确的路径.
这个dll 是想供一个 BI工具去调用
该BI工具 有一个dll 函数可以加载外部dll文件
DLL(P1;P2;P3) P1为dll文件名 p2 为dll中需调用的函数名 P3为 返回值和输入值类型
如 dll("getpath";"getdpath";"BD" = 参数类型 D 返回值类型 B P3的内容如下
Code Description Input via C-Declaration
-----------------------------------------------------------------------------
A Boolean value (0=False, 1=True) Value short int
B 8-Byte floating point number Value (Windows) double
C String with 0 as delimiter Reference char
(max. length = 255 characters)
D String with a byte counter Reference unsigned char
(the first byte indicates the length;
max. length = 255 characters)
E 8-Byte floating point number Reference double
H Two byte unsigned integer Value unsigned short int
I Two byte signed integer Value short int
J Four byte signed integer Value long int
M Two byte signed integer Reference short int
N Four byte signed integer Reference long int
------------------------------------------------------------------------------
在dll被 测试EXE调用 报错后,找不到解决的办法,然后在对应的 A-N代码中有找不到合适
的返回值类型,几个都试过了(如 dll("getpath";"GETDPATH";"D" ) ,都报内部错误,
想请各位能给整理下我的 dll文件代码 和 调用EXE 看是什么原因报错
然后找找 在 BI 里调用 该用什么返回值类型好,并相应的改改 DLL 代码
谢谢各位了!!!
谢谢!!