如何在COM+中调用dll ?(300分)

  • 主题发起人 沉香屑
  • 开始时间

沉香屑

Unregistered / Unconfirmed
GUEST, unregistred user!
在com+对象中调用dll
loadLibrary函数失败
但是在调试环境下正常
如果不注册为com+对象,注册为com对象,完全正常
如果用进程外com对象调用,也完全正常
区别我想只在于com+对象需要用dllhost
在调试状态下是利用调试器进程加载dll,一般的进程内com会加载到调用进程中,
进程外com有自己的进程
难道dllhost和别的进程有什么区别,以至于不能加载dll?
诸位高手不妨试一下

TPMDLLFunction= function :pchar;

TCallDllDemo = class(TTypedComObject, ICallDllDemo)
private
DllHandle:Integer;
PMDLLFunction:TPMDLLFunction;
protected
function hello(var param: OleVariant): HResult; stdcall;
function freedll: HResult; stdcall;
{Declare ICallDllDemo methods here}
public
procedure Initialize;override;
end;
procedure TCallDllDemo.Initialize;
begin
DllHandle := LoadLibrary('PDllDemo.dll');
if DllHandle=0 then
showmessage('加载dll失败');
@PMDLLFunction:=GetProcAddress(DllHandle, 'PMDLLFunction');
end;

一个com对象,在Initialize中加载dll,如果注册为com+,在调试环境下正常,
如果直接执行,肯定返回0,关掉jit激活和事务都没有什么效果

300分不够可以再加
 
這個問題我不是回覆過了嗎? 無法解決問題嗎?
 
解决了,因为我在两处提问
600分全部给您:)
 
顶部