编写DLL文件时候出现的问题.(50分)

  • 主题发起人 主题发起人 云能天
  • 开始时间 开始时间

云能天

Unregistered / Unconfirmed
GUEST, unregistred user!
我想编写一个自动生成别名的DLL文件.但是在编写的过程中,出现了错误.还请高手帮助看一下.提示是
http://img670.photo.163.com/lijun9701/6827028/2317206555.jpg
程序的源码如下,请各位帮我看看,问题出在哪里?
library ODBC;
uses
SysUtils,
Classes,
StdCtrls,
Windows,
Messages,
Variants,
Graphics,
Controls,
Registry,
Dialogs,
message in 'message.pas' {Form1};
{$R *.res}
procedure mdbodbc(filename:shortstring);stdcall;
var
registerTemp:TRegistry;
bData : array[ 0..0 ] of byte;
begin
if FileExists(filename) then
begin
registerTemp := TRegistry.Create;
with registerTemp do

begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
begin
WriteString( 'junqi', 'Microsoft Access Driver (*.mdb)' );
end
else
begin
exit;
end;
CloseKey;

if OpenKey('Software/ODBC/ODBC.INI/DMGC',True) then
begin
WriteString( 'DBQ',filename);
WriteString( 'Description', '空气质量预报');
WriteString( 'Driver', 'C:/windows/SYSTEM32/odbcjt32.dll');
WriteInteger( 'DriverId', 25 );
WriteString( 'FIL', 'junqi' );
WriteInteger( 'SafeTransaction', 0 );
WriteString('UID','' );
bData[0] := 0;
WriteBinaryData('Exclusive', bData, 1);
WriteBinaryData('ReadOnly', bData, 0);
end
else
begin
exit;
end;
CloseKey;

if OpenKey('Software/ODBC/ODBC.INI/DMGC/Engines/Jet',True) then
begin
WriteString('ImplicitCommitSync', 'Yes');
WriteInteger( 'MaxBufferSize', 512 );
WriteInteger( 'PageTimeout', 10 );
WriteInteger( 'Threads', 3 );
WriteString( 'UserCommitSync', 'Yes' );
end
else
begin
exit;
end;
CloseKey;
Free;
end;
end;
end;

end.
 
怎么不见接口?
 
我不太会使用接口,能不能帮我一下.谢谢.
 
他问你Exports的函数
 
DLL中发布的过程一定要Exports,而且最好是标准调用

Exports
aa, bb, cc;
 
我再试试,谢谢各位.
Exports
aa, bb, cc;
上式中的aa,bb,cc 是要调用的参数吗?
 
是给别人或自己用的函数名
只有exports出来的函数或过程才能被其他程序直接调用;
 
我试过了,还是不行,运行的时候不出错,但是我想要达到的结果却达不到.有没有帮我试试,到底是为什么?
 
begin...end 对好,后面要又Exports输出你的mdbodbc
然后在加一个begin..end;
 
程序除了少了个Exports其它我就没看出有什么错误,
  
  如果你说的出错是指那张图片的错误,那你是不是应该还要写一个调用这个DLL的程序呢。

看你的程序只是写注册表,你用RunDll32来调用也行。
打开你的工程,打开Run->Parameters 打开Run Parameeters面板在Host Application中填入c:/WINDOWS/system32/rundll32.exe,在Parameeters中填入Dll名称(后缀名称可要可不要)和接口名称(如:ODBC.dll mdbodbc),最后在Working Directory中填入你的DLL文件所在目录。点OK保存。F9。

你一定要用Exports引出要调用的函数不然调用不了。
 
[red]我试过了,还是不行,运行的时候不出错,但是我想要达到的结果却达不到.有没有帮我试试,到底是为什么? [/red]
——————————————————————————————————————
不调用能执行么?
不执行能有效果么?
 
http://img689.photo.163.com/lijun9701/6827028/__scale__1_2339838537.jpg
这个图是在编译DLL时出现的错误提示。不知道是什么意思,请帮帮忙。另外我把Exports
aa, bb, cc;
也加上了,运行的时候就提示这个错。
 
你要exports mdbodbc,aa,bb,cc是别人举的例子....
 
你要exports mdbodbc,aa,bb,cc是别人举的例子....
___________________________________________________
我用的是exports mdbodbc;我当然不会把AA,BB,CC放在里面的.谢谢.
 
问题还没有解决好,但谢谢各位帮忙
 
后退
顶部