一个delphi的单元文件怎么编译成DLL文件?然后在BCB中能够调用? 谢谢大家了!!
文件如下:unit DMUnit;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, SMS_TLB, StdVcl, Provider, DB, ADODB, Dialogs;type
TSMSServers = class(TRemoteDataModule, ISMSServer)
Query: TADOQuery;
ADOQuery1: TADOQuery;
Provider: TDataSetProvider;
ClientDataSet: TClientDataSet;
private
procedure SeparateTerms(S: WideString; Separator: Char;
Terms: TStringList);
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
{function SetMsg(const Msg, Tel, SendTime, areaId: WideString): WordBool;
safecall;}
function ModfiyMsg(const MsgID, Msg, Tel, SendTime: WideString): WordBool;
safecall;
function DelMsg(const MsgID: WideString): WordBool; safecall;
function GetMsg: OleVariant; safecall;
public
function SetMsg(const Msg, Tel, SendTime, areaId: WideString): WordBool;
safecall;
{function ModfiyMsg(const MsgID, Msg, Tel, SendTime: WideString): WordBool;
safecall;
function DelMsg(const MsgID: WideString): WordBool; safecall;
function GetMsg: OleVariant; safecall;}
{ Public declarations }
end;implementationuses MainUnit;{$R *.DFM}procedure TSMSServers.SeparateTerms(S: WideString; Separator: Char; Terms: TStringList);
var
HS: WideString;
P: Integer;
begin
Terms.Clear;
if Length(S) = 0 then
Exit;
P := Pos(Separator, S);
while P <> 0 do
begin
HS := Copy(S, 1, P-1);
Terms.Add(HS);
Delete(S, 1, P);
P := Pos(Separator, S);
end;
if Length(S) > 0 then
Terms.Add(S);
end;function TSMSServers.DelMsg(const MsgID: WideString): WordBool;
begin
Query.Close;
Query.SQL.Clear;
Result := True;
try
Query.SQL.Add('delete from msg_list where msg_id='+MsgID);
Query.ExecSQL;
MainForm.SetMsgFSSJ;
except
Result := False;
end;
end;function TSMSServers.GetMsg: OleVariant;
begin
ClientDataSet.Close;
try
ClientDataSet.CommandText:='SELECT * FROM msg_list ';
ClientDataSet.Open;
Result:=ClientDataSet.XMLData;
except
{ on E: Exception do
begin
result:=AddLog('TSMSServer.GetMsg',E.Message);
end; }
end;
end;function TSMSServers.ModfiyMsg(const MsgID, Msg, Tel,
SendTime: WideString): WordBool;
begin
Query.Close;
Query.SQL.Clear;
Result := True;
try
Query.SQL.Add('update msg_list set msg_text='+QuotedStr(Msg)+',phone_list='
+QuotedStr(Tel)+',send_date='+QuotedStr(SendTime)+' where msg_id='+MsgID);
Query.ExecSQL;
//MainForm.SetMsgFSSJ;
except
Result := False;
end;
end;function TSMSServers.SetMsg(const Msg, Tel,
SendTime, areaId: WideString): WordBool;
var
SendTime1: String;
ComID: Integer;
DepName: String;
I: Integer;
FList: TStringList;
begin
Query.Close;
Query.SQL.Clear;
Result := True;
if Trim(SendTime) = '' then
SendTime1 := FormatDateTime('YYYY-MM-DD HH:NN:SS',Now)
else
SendTime1 := SendTime;
try
DepName := FCC.GetDepName(areaId);
ComID := FCC.GetCom(areaId);
MainForm.WriteLog(Format('[%S]发送信息:时间[%S],手机号[%S],内容[%S]', [DepName, SendTime, Tel, Msg]));
FList := TStringList.Create;
try
SeparateTerms(Tel, ',', FList);
for I := 0 to FList.Count - 1 do
begin
Query.SQL.Text := 'insert into Msg_List(msg_text,phone_list,Send_Date,send_type,COM_ID)'
//+' values('+QuotedStr(Msg)+','+QuotedStr(Tel)+',1,'+IntToStr(ComID)+')';
+' values('+QuotedStr(Msg)+','+QuotedStr(FList[I])+',''' +SendTime1+''',1,'+IntToStr(ComID)+')';
//2表示定时消息 1表示即时消息
Query.ExecSQL;
end;
finally
FList.Free;
end; MainForm.Timer1.Enabled := True;
except
Result := False;
end;
end;class procedure TSMSServers.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end
else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;initialization
TComponentFactory.Create(ComServer, TSMSServers,
Class_SMSServer, ciMultiInstance, tmApartment);
end.
文件如下:unit DMUnit;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, SMS_TLB, StdVcl, Provider, DB, ADODB, Dialogs;type
TSMSServers = class(TRemoteDataModule, ISMSServer)
Query: TADOQuery;
ADOQuery1: TADOQuery;
Provider: TDataSetProvider;
ClientDataSet: TClientDataSet;
private
procedure SeparateTerms(S: WideString; Separator: Char;
Terms: TStringList);
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
{function SetMsg(const Msg, Tel, SendTime, areaId: WideString): WordBool;
safecall;}
function ModfiyMsg(const MsgID, Msg, Tel, SendTime: WideString): WordBool;
safecall;
function DelMsg(const MsgID: WideString): WordBool; safecall;
function GetMsg: OleVariant; safecall;
public
function SetMsg(const Msg, Tel, SendTime, areaId: WideString): WordBool;
safecall;
{function ModfiyMsg(const MsgID, Msg, Tel, SendTime: WideString): WordBool;
safecall;
function DelMsg(const MsgID: WideString): WordBool; safecall;
function GetMsg: OleVariant; safecall;}
{ Public declarations }
end;implementationuses MainUnit;{$R *.DFM}procedure TSMSServers.SeparateTerms(S: WideString; Separator: Char; Terms: TStringList);
var
HS: WideString;
P: Integer;
begin
Terms.Clear;
if Length(S) = 0 then
Exit;
P := Pos(Separator, S);
while P <> 0 do
begin
HS := Copy(S, 1, P-1);
Terms.Add(HS);
Delete(S, 1, P);
P := Pos(Separator, S);
end;
if Length(S) > 0 then
Terms.Add(S);
end;function TSMSServers.DelMsg(const MsgID: WideString): WordBool;
begin
Query.Close;
Query.SQL.Clear;
Result := True;
try
Query.SQL.Add('delete from msg_list where msg_id='+MsgID);
Query.ExecSQL;
MainForm.SetMsgFSSJ;
except
Result := False;
end;
end;function TSMSServers.GetMsg: OleVariant;
begin
ClientDataSet.Close;
try
ClientDataSet.CommandText:='SELECT * FROM msg_list ';
ClientDataSet.Open;
Result:=ClientDataSet.XMLData;
except
{ on E: Exception do
begin
result:=AddLog('TSMSServer.GetMsg',E.Message);
end; }
end;
end;function TSMSServers.ModfiyMsg(const MsgID, Msg, Tel,
SendTime: WideString): WordBool;
begin
Query.Close;
Query.SQL.Clear;
Result := True;
try
Query.SQL.Add('update msg_list set msg_text='+QuotedStr(Msg)+',phone_list='
+QuotedStr(Tel)+',send_date='+QuotedStr(SendTime)+' where msg_id='+MsgID);
Query.ExecSQL;
//MainForm.SetMsgFSSJ;
except
Result := False;
end;
end;function TSMSServers.SetMsg(const Msg, Tel,
SendTime, areaId: WideString): WordBool;
var
SendTime1: String;
ComID: Integer;
DepName: String;
I: Integer;
FList: TStringList;
begin
Query.Close;
Query.SQL.Clear;
Result := True;
if Trim(SendTime) = '' then
SendTime1 := FormatDateTime('YYYY-MM-DD HH:NN:SS',Now)
else
SendTime1 := SendTime;
try
DepName := FCC.GetDepName(areaId);
ComID := FCC.GetCom(areaId);
MainForm.WriteLog(Format('[%S]发送信息:时间[%S],手机号[%S],内容[%S]', [DepName, SendTime, Tel, Msg]));
FList := TStringList.Create;
try
SeparateTerms(Tel, ',', FList);
for I := 0 to FList.Count - 1 do
begin
Query.SQL.Text := 'insert into Msg_List(msg_text,phone_list,Send_Date,send_type,COM_ID)'
//+' values('+QuotedStr(Msg)+','+QuotedStr(Tel)+',1,'+IntToStr(ComID)+')';
+' values('+QuotedStr(Msg)+','+QuotedStr(FList[I])+',''' +SendTime1+''',1,'+IntToStr(ComID)+')';
//2表示定时消息 1表示即时消息
Query.ExecSQL;
end;
finally
FList.Free;
end; MainForm.Timer1.Enabled := True;
except
Result := False;
end;
end;class procedure TSMSServers.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end
else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;initialization
TComponentFactory.Create(ComServer, TSMSServers,
Class_SMSServer, ciMultiInstance, tmApartment);
end.
可以说的详细一点么?我不是很明白该怎么去编译呢?
你看看帮助文档具体是怎么做的。