Re: Referencing external DLLs & Interfaces in ATL Project
SteveB <steve.brett@callcredit.plc.uk> wrote:
Something along the lines of:
STDMETHOD(PrepareReport)(udtCRUserSession* pUdtUserSession,
udtCRSearchRequest* pUdtSearchRequest, udtCRAuditSearch*
pUdtCRAuditSearch, IBlockGenerator** ppIBlockGenerator);
the udts are fine but when i try to reference ICollation I get the
following error:
c:\5.0\Development\App Server
Code\CallScoreV2\CallScoreV2\CallScoreV2\CallScoreV2.idl(20): error
MIDL2025 : syntax error : expecting a type specification near
"IBlockGenerator"
I have tried referencing the Dll that contains the definition of the
interface for IBlockGenerator
and after much trawling of the net have tried writing a new IDL file
that imports the DLLs i need. This didn't work.
The general structure of an IDL file should look like this. Well,
actually, there are three typical structures: one for custom
(non-automation) interfaces where you need proxy/stub code but not the
type library; one for automation interfaces where you don't care about
proxy/stub and only want the type library; and the most general
structure that allows one to build both proxy/stub and TLB and
accomodates both automation and custom interfaces in the same IDL.
// --- IDL for custom interfaces: no library block
import "oaidl.idl";
import "ocidl.idl";
import "ThirtParty.idl";
[object, uuid(...)]
interface IMyInterface : IUnknown {
HRESULT MyMethod([in] IThirdParty* p);
};
// --- IDL for automation interfaces: interface defined in library block
[uuid(...)]
library MyLib {
importlib("stdole2.tlb");
importlib("ThirtdParty.tlb");
[object, dual, uuid(...)]
interface IMyInterface : IDispatch {
[id(1)]
HRESULT MyMethod([in] IThirdParty* p);
};
[uuid(...)]
coclass MyObj {
[default] interface IMyInterface;
};
};
// --- Most general IDL structure: interfaces defined outside library
block
// and referenced inside
import "oaidl.idl";
import "ocidl.idl";
import "ThirtParty.idl";
[object, dual, uuid(...)]
interface IMyInterface : IDispatch {
[id(1)]
HRESULT MyMethod([in] IThirdParty* p);
};
[uuid(...)]
library MyLib {
importlib("stdole2.tlb");
importlib("ThirtdParty.tlb");
[uuid(...)]
coclass MyObj {
[default] interface IMyInterface;
};
};
Note that for the third, most general and most commonly used structure,
if you need to refer to some outside interface you need both IDL and TLB
describing it.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925