如何使编译后的可执行文件既能在windows 98与windows NT下同时执行。(200分)

  • 主题发起人 主题发起人 hylwy
  • 开始时间 开始时间
H

hylwy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使编译后的可执行文件既能在windows 98与windows NT下同时执行。
现在的困难是该程序所调用的系统函数在windows 98与windows Nt下的调用格式不同。
我在98下调试通过的程序在NT下不能运行,在NT下调试通过的程序在98下不能运行,
老告诉我调用的函数不对。
 
你用了哪个函数?一般可以找找解决方法的
 
编两个过程,一个在NT下调用,一个在98下调用。调用前先取得操作系统类型。
 
比如说设置共享目录的函数吧,在不同的操作系统下函数名称一样,但调用的格式不一样。
现在我可以做到编两个过程,一个在NT下调用,一个在98下调用。但总得在某个确定的操作
系统下编译吧,这样就出问题了,它告诉我函数调用格式不对,编译通不过。
 
这只能通过你在程序内部判断平台版本,然后调用不同的函数,或是调用函数的不同格式。
 
动态引入。
var
Kernel: THandle;
TDummy98 = function (Special: Longint): Longint;
TDummyNT = function (FileName: PChar): Longint;
Dummy98: TDummy98;
DummyNT: TDummyNT;
begin
Kernel := GetModuleHandle('kernel');
if (GetPlatform = GP_9x) then
@Dummy98 := GetProcAddress(Kernel, 'Dummy');
else
@DummyNT := GetProcAddress(Kernel, 'Dummy');
//随后的代码
if (GetPlatform = GP_9x) then
Dummy98(...................);
else
DummyNT(...................);

OK 了吗?
 
to :mikedeakins:
我采用您所说的办法试了一下,在一个操作系统下编译通过了,但是在另一个操作系统下
一调用就出错。
能不能给个例子啊?
 
to hylwy:
你用的是哪一个函数(定义不同的)?另外,调用时出什么错误?
 
to mikedeakins:
我用的是NetShareAdd,在NT与98下的调用格式不同,我现在在NT下调试通过了,
在98下程序也可运行了,但一执行所调用的函数,就报内存地址出错!
请给个简单的例子吧!
 
可不可以分别在98和NT下编写2个dll,然后根据实际情况调用不同的dll。
 
98和NT下分别编译
 
mikedeakins的办法应该可以啊,调用时出什么错啊,跟踪一下,是哪一句出错
 
我有一个 C++ Builder 的应用程序就是使用了这种方法。代码没必要贴上来了,和我
前面的 Pascal 代码意思完全相同。
怎么我想出来的 tricky 的招数在别人的计算机上都不能实现呢???
 
多人接受答案了。
 
后退
顶部