exe文件中如何声明输出函数? 如何在另一个程序(可能是VB)中调用 .exe的输出函数 ( 积分: 10 )

  • 主题发起人 主题发起人 5411
  • 开始时间 开始时间
5

5411

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,我以前写个一个小程序,只是一个exe文件,里面放置了大量的好用的小函数,我想从外面调用这些小函数.在exe文件里如何写.另外,我不想把它改写成dll文件,因为这个小程序也同时在使用.
 
如题,我以前写个一个小程序,只是一个exe文件,里面放置了大量的好用的小函数,我想从外面调用这些小函数.在exe文件里如何写.另外,我不想把它改写成dll文件,因为这个小程序也同时在使用.
 
调用可以用shell函数:
p:=pchar(ExtractFilePath(Application.Exename)+fun.exe');
ShellExecute(0, nil, p, nil, nil, SW_NORMAL);

做成dll可以建个dll工程将exe中的单元加进来,声明dll接口就可以调用了。dll什么格式看一下相关资料就行了
 
老兄,你也太懒了吧!
不想新建一个DLL文件,要修改你那个主程序,将想要用的那些函数导出
exports ****(在EXE中导出应该不成问题的)
想要调用那些导出函数时,这下麻烦大了。。
winNT以后的版本,每个EXE文占有自已单独4G空间
 
你用Active exe 不就得了
 
to the_best_of_best:
怎么加啊,示范一下下 :)
to 同甘共苦:
不是懒,是怎么样不重复才好。不想一个函数改两遍。
--------------------------------------------------------------------
不想新建一个DLL文件,要修改你那个主程序,将想要用的那些函数导出
exports ****(在EXE中导出应该不成问题的)
--------------------------------------------------------------------
//是啊,是啊,我就要这么干的,并且 也这么干了,可是一调用,就出错。连提示都没有啊。:(

to longling1979:
Active exe 是什么啊?
 
顶一顶啊。
 
把EXE文件改成DLL不就搞定了嘛,
也不用费多少事.
 
改成dll同意。
 
to luckysw:
Exe已经写定,且使用老长时间了,不想弄出事来啊。且改起来比较多啊,太多。
 
噢,调用EXE里的函数好象比较难吧
学习一下
 
有什么改的好办法。
千八百个函数,让我一个个去写输出函数吗?
 
直接Export就可以了,和DLL一样用,查以前的帖子,有过讨论的
 
偶export过啊,不好用。连错也不报。
以前大侠们一定讨论过这个问题了,在哪?找一午了。
 
EXE

function GetName(szName: PChar; MaxLen: Cardinal): Cardinal; stdcall;
begin
Result := MaxLen;
GetUserName(szName, Result);
end;

procedure TForm1.Button1Click(Sender: TObject);
type
TSayHello = procedure;
var
hDLL: THandle;
SayHello: TSayHello;
begin
hDLL := LoadLibrary('Project2.DLL');
if hDLL <> 0 then
begin
@SayHello := GetProcAddress(hDLL, 'SayHello');
SayHello;
FreeLibrary(hDLL);
end
else
begin
ShowMessage(SysErrorMessage(GetLastError));
end;
end;

exports
GetName;


DLL

function wvsprintf(Output: PChar; Format: PChar; Arg_List: array of const): Integer;
begin
Result := Windows.wvsprintf(Output, Format, @Arg_List[Low(Arg_List)]);
end;

procedure SayHello; stdcall;
type
TGetName = function(szName: PChar; nMaxLen: Cardinal): Cardinal; stdcall;
var
GetName: TGetName;
szName : array[0..255] of Char;
Buf : PChar;
begin
@GetName := GetProcAddress(0, 'GetName');
ZeroMemory(@szName, SizeOf(szName));
GetName(szName, SizeOf(szName));
Buf := StrAlloc(4096);
try
wvsprintf(Buf, 'Hello, %s!', [@szName]);
MessageBox(0, Buf, 'SayHello', MB_OK);
finally
StrDispose(Buf);
end;
end;

exports
SayHello;
 
不过,这个EXE是不能像DLL一样调用的,如果CreaetProcess获得句柄,或许可以
刚才本来写了个代码想试一试,结果机器给瑞星搞死机了[:(]
 
不懂,解释解释。
 
想了一下,EXE引用另一个EXE中Export的函数有点难度,因为他们不在一个地址空间
这个和DLL调用它的宿主EXE中的Export函数是不一样的,没想到什么好办法
 
可以出、也可以用,测试过。

声明跟API差不多的。
 
exe可以当dll用,没问题。
 
后退
顶部