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