我将一个窗体单元包含到了一个DLL工程中,再用两个函数来完成显示和关闭窗体,(也是《Delphi6开发人员指南》一书中第187页的例子,我把这个例子中的窗体改了,我把那个日期控件删除了,换上了ADO组件和DBGrid组件,编译正常,调用时出错提示未调用Coinstnace())。
是不是dll包含的窗体一加入OLE组件就成了COM了??我现在想实现一个功能,就是将软件的主窗体做到一个dll中,客户端远程COM调用这个dll文件,将主窗体显示到客户端,不知道大家有什么好的方法,能给你思路的朋友,我另外再送个200分
是不是dll包含的窗体一加入OLE组件就成了COM了??我现在想实现一个功能,就是将软件的主窗体做到一个dll中,客户端远程COM调用这个dll文件,将主窗体显示到客户端,不知道大家有什么好的方法,能给你思路的朋友,我另外再送个200分
解决方案 »
- 像TWebBrowser这类ActiveX控件,如何设置Parent控件﹖
- 有一难题,请大侠们帮助,小妹感激不尽
- 三层中流数据的事务处理?
- 如何将两个TStringlist合称为一个TStringlist?
- 做什么样的查询窗体好
- 怎样知道已经存在的 "内存映象文件" 的信息,比如大小?
- TStringlist.sort 默认是大小写不敏感排序,而我要大小写敏感。
- 谁有好的人事管理的软件能够提供我急用,提供线索的也有分
- CSDN的结贴率好低呀,我回答的好多问题都没拿到分.......
- 谁能给我一段关于注册码的算法?
- 问题 excel做报表输出工具
- TComboBox的派生类中,如果希望对下拉框的列表显示的内容进行加工,覆盖了继承来这个方法没有效果,应该怎样做?
library CalendarMLLib;《《《《这是DLL文件uses
ShareMem,
SysUtils,
Classes,
activex,
DLLFrm in 'DLLFrm.pas' {DLLForm};exports
ShowCalendar,
CloseCalendar;
begin
CoInitialize(nil);《《放到了此处
end.
unit DLLFrm; <<<<<<<<<<<<<这是窗体文件interfaceuses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, Grids, Calendar, DB, ADODB, DBGrids,activex;type TDLLForm = class(TForm)
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
end;{ Declare the export function }
function ShowCalendar(AHandle: THandle; ACaption: String): Longint; stdCall;
procedure CloseCalendar(AFormRef: Longint); stdcall;
implementation
{$R *.DFM}function ShowCalendar(AHandle: THandle; ACaption: String): Longint;
var
DLLForm: TDllForm;
begin
// Copy application handle to DLL's TApplication object
Application.Handle := AHandle;
DLLForm := TDLLForm.Create(Application);
Result := Longint(DLLForm);
DLLForm.Caption := ACaption;
DLLForm.Show;
end;procedure CloseCalendar(AFormRef: Longint);
begin
if AFormRef > 0 then
begin
TDLLForm(AFormRef).Release;
CoUnInitialize;《《《《《《《《《《《《放在了此处,因为调用这个函数将退出
end;
end;end.我放到这两个地方之后,半闭程序时总提示出错。
var
DLLForm: TDllForm;
begin
// Copy application handle to DLL's TApplication object
Application.Handle := AHandle;
CoInitialize(nil);
DLLForm := TDLLForm.Create(Application);
Result := Longint(DLLForm);
DLLForm.Caption := ACaption;
DLLForm.Show;
end;procedure CloseCalendar(AFormRef: Longint);
begin
if AFormRef > 0 then
begin
TDLLForm(AFormRef).Release;
CoUnInitialize;《《《《《《《《《《《《放在了此处,因为调用这个函数将退出
end;
end;end.