我在VB中编制了一个ActiveX DLL,因为VB无法编制标准的DLL,所以想将此ActiveX DLL转化为标准的DLL在其他程序中调用。我的ActiveX DLL很简单,由一个类、一个模块、一个窗体(此为VB中编制)构成,类在初始化时就加载窗体。现在我想将此ActiveX DLL在Delphi中转换成标准的DLL,我想在其他程序中如果通过LoadLibrary一调用此DLL就实现加载窗体,而我对Delphi一窍不通,所以请您帮忙,谢谢!!!
我的代码如下:
//通过转化VB的ActiveX DLL
unit MyTest_TLB;
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. 
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interface
uses Windows, ActiveX, Classes, Graphics, OleServer, StdVCL, Variants;
const
  MyTestMajorVersion = 6;
  MyTestMinorVersion = 0;
  LIBID_MyTest: TGUID = '{5EFDB46C-52BF-43C0-8340-D2EC38A7F6A8}';
  IID__clsPub: TGUID = '{016A3672-BC1D-41E7-B90A-AEF75635B2FD}';
  CLASS_clsPub: TGUID = '{F29EEA66-82CF-4D25-88CE-4CD272CE6A87}';
type
  _clsPub = interface;
  _clsPubDisp = dispinterface;
  clsPub = _clsPub;
  _clsPub = interface(IDispatch)
    ['{016A3672-BC1D-41E7-B90A-AEF75635B2FD}']
  end;
  _clsPubDisp = dispinterface
    ['{016A3672-BC1D-41E7-B90A-AEF75635B2FD}']
  end;
  CoclsPub = class
    class function Create: _clsPub;
    class function CreateRemote(const MachineName: string): _clsPub;
  end;
implementation
uses ComObj;
class function CoclsPub.Create: _clsPub;
begin
  Result := CreateComObject(CLASS_clsPub) as _clsPub;
end;
class function CoclsPub.CreateRemote(const MachineName: string): _clsPub;
begin
  Result := CreateRemoteComObject(MachineName, CLASS_clsPub) as _clsPub;
end;
end.//DLL
library MyDll;
uses
  SysUtils,
  Classes,
  messages,
  windows,
  MyTest_TLB in 'C:\Program Files\Borland\Delphi7\Imports\MyTest_TLB.pas';
{$R *.res}
var
 TMyTest:MyTest_TLB.CoClsPub;procedure Install;stdcall;
begin
  TMyTest.Create;
end;
//exports Install;
//我不想输出函数  
procedure DllEntryPoint(fdwReason:DWORD);
begin
  case fdwReason of
    DLL_PROCESS_ATTACH:Install;
    DLL_PROCESS_DETACH:MessageBeep(0);
    DLL_THREAD_ATTACH:Install;
    DLL_THREAD_DETACH:MessageBeep(0);
  end;
end;begin
  DLLProc:=@DllEntryPoint;
  DllEntryPoint(DLL_PROCESS_ATTACH);
end.
我编译了标准的DLL后重新回到VB的环境中使用,代码如下:
Private Sub Form_Load()
Dim lRes As Long 
lRes = LoadLibrary("D:\Dll\MyDll.dll")
If lRes <> 0 Then
    MsgBox "运行成功!"
End If
End Sub
但一运行就出现:“Exception EOleSysError in Module MyTest.dll at 00025081.尚未调用CoInitialize.”错误,我不知如何解决。另外:如果生成了标准的DLL,是否还需要原先由VB的ActiveX DLL调用的其他各个类库吗?