我使用的调用与GUID
一个CoCreateInstance
创建一个对象(编剧) 是否有可能不使用GUID
创建相同COM对象的代码,通过手动加载DLL
?如果是的话,如何找到DLL
,如何知道创建对象的函数的名字?从DLL创建COM对象手动
回答
号
一个COM服务器,不管是DLL或EXE或什么的,平时举办许多不同的,而相互连接,接口的实现。
所以你会发现你的服务器的DLL,但你仍然必须告诉服务器应该为你实现它的许多GUID中的哪一个。
见的DllGetClassObject切入点http://msdn.microsoft.com/en-us/library/windows/desktop/ms680760.aspx
要找到COM服务器EXE或DLL检查类似HKEY_CLASSES_ROOT\CLSID\{00000108-0000-0010-8000-00AA006D2EA4}\InprocServer32
的注册表项。然后,您的特定库可以复制与额外的非COM API他们的主要COM API。那么这个非COM API就是你可以用你描述的方式使用的那个。如果它提供了额外的手段。
但是,就通用COM标准而言,这是不可能的,COM是围绕GUID建立的。
免费注册COM允许这个 –
....仍然会要求创建类。而类是GUID。示例:Microsoft XMLLite.DLL API –
从DLL直接创建一个对象实例,只要你知道它的确切路径,此代码应工作:
type
T_DGCO = function(const CLSID, IID: TGUID; var Obj): HResult; stdcall; //DllGetClassObject
var
p: T_DGCO;
f: IClassFactory;
x: IMyObject; //replace by an interface of choice
begin
p := GetProcAddress(LoadLibrary(FullPathToDLL), 'DllGetClassObject');
Win32Check(p <> nil);
OleCheck(p(CLASS_MyObject, IClassFactory, f));
OleCheck(f.CreateInstance(nil, IMyObject, x));
x.Hello('World'); //or whatever your object does
end;
如果DllGetClassObject()或CreateInstance()失败,则调用无参数'RaiseLastOSError()'是错误的,因为它们不使用'SetLastError()'报告错误,所以它们返回改为'HRESULT'错误代码。将错误代码保存到一个变量,并将其传递给重载的'RaiseLastOSError()',该错误代码将错误代码作为输入。或者更好的是,使用'OleCheck()'而不是'LoadLibrary()'''GetProcAddress()''使用'Win32Check()'。 –
看到我最近的编辑。 –
这个答案没有解决另一个需求,引用:创建相同的COM对象**而不使用GUID ** - 没有声明“CLASS_MyObject,IClassFactory”? –
- 1. 从C++创建COM对象?
- 2. 创建COM对象
- 3. 从自己的C#DLL创建COM对象4GL
- 4. 无法创建COM对象
- 5. Com。 C#创建类型的COM对象
- 6. 从非托管C++创建COM DLL LIB
- 7. 无法使用代理存根创建com对象dll
- 8. 。经典的64位COM COM DLL:800a01ad ActiveX组件无法创建对象
- 9. 在另一个COM对象内创建一个COM对象
- 10. 从COM ProgID加载.NET程序集而不创建COM对象
- 11. 手动创建JavaScript事件对象
- 12. 从动态对象创建对象
- 13. python:创建2个com对象
- 14. 使用Java创建COM对象
- 15. 无法创建COM对象Rfc2898DeriveBytes
- 16. 如何在F#中创建COM对象#
- 17. COM可见DLL作为ActiveX对象
- 18. 找不到DLL文件(非COM对象)
- 19. 在C++中使用COM对象dll
- 20. 使用.NET注册com对象dll
- 21. COM对象和不同版本的DLL
- 22. 创建一个COM DLL设置
- 23. 如何创建一个COM DLL(类库)?
- 24. 删除在DLL中创建的对象
- 25. 无法使用VB6程序创建对象VB6 COM DLL使用VB6程序
- 26. 创建从对象
- 27. 创建从对象
- 28. 从64位cscript脚本创建32位COM对象
- 29. 如何从C#创建WIC ImageFactory(一个COM对象)?
- 30. COM对象vs自动化对象
是的,如果有一个平坦的原料药出口。你使用什么对象(那个脚本)? – Victoria
jscript.dll,guid:{f414c260-6ac0-11cf-b6d1-00aa00bbbb58} – Arsnow
Aha,[IActiveScript](https://docs.microsoft.com/en-us/scripting/winscript/reference/iactivescript)接口。 – Victoria