本文主要是介绍在代码中插入ax,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
采用下面代码可以不需要注册ax,直接在程序中调用ax
#ifndef COMUtility_H
#define COMUtility_H//#include <Windows.h>//// define the prototype of the class factory entry point in a COM dll
typedef HRESULT (STDAPICALLTYPE *DllGetClassObjectT)(REFCLSID clsid, REFIID iid, LPVOID *ppv);//template <DWORD dwUnique>
class COMUtilityT
{
public:static HRESULT CreateObjectFromPath(REFCLSID clsid, IUnknown **ppUnk, LPCSTR lpszPath){// load the target DLL directlyHMODULE hModule = LoadLibraryA(lpszPath);if (hModule == NULL) {return HRESULT_FROM_WIN32(GetLastError());}return CreateObjectFromPath(hModule, clsid, ppUnk);}static HRESULT CreateObjectFromPath(REFCLSID clsid, IUnknown **ppUnk, LPCWSTR lpszPath){// load the target DLL directlyHMODULE hModule = LoadLibraryW(lpszPath);if (hModule == NULL) {return HRESULT_FROM_WIN32(GetLastError());}return CreateObjectFromPath(hModule, clsid, ppUnk);}private:static HRESULT CreateObjectFromPath(HMODULE hModule, REFCLSID clsid, IUnknown **ppUnk){if (hModule == NULL) {return HRESULT_FROM_WIN32(GetLastError());}// the entry point is an exported functionDllGetClassObjectT fn = (DllGetClassObjectT) GetProcAddress(hModule, "DllGetClassObject");if (fn == NULL) {return HRESULT_FROM_WIN32(GetLastError());}// create a class factoryCComPtr<IUnknown> pUnknown;HRESULT hr = fn(clsid, IID_IUnknown, (LPVOID *) &pUnknown);if (SUCCEEDED(hr)) {CComQIPtr<IClassFactory> pClassFactory(pUnknown);if (pClassFactory == NULL) {hr = E_NOINTERFACE;}else {// ask the class factory to create the objecthr = pClassFactory->CreateInstance(NULL, IID_IUnknown, (LPVOID *) ppUnk);}}return hr;}
};//typedef COMUtilityT<0> COMUtility;//#endif
delphi代码:
var
DllGetClassObject: function(const CLSID, IID: TGUID; var Obj): HResult; stdcall;
ClassF: IClassFactory;
base: IBaseFilter;
LibHandle: Integer
beginLibHandle:= LoadLibrary('xvid.ax');DllGetClassObject:= GetProcAddress(LibHandle, 'DllGetClassObject');DllGetClassObject(CLSID_XVID, IClassFactory, ClassF);ClassF.CreateInstance(nil, IID_IBaseFilter, base);FilterGraph.AddFilter(base, 'Xvid Decoder')
end;
这篇关于在代码中插入ax的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!