COM高手看看?编译方面的问题?
我先用VC的工程向导生成一个makefile类型的工程,然后加入如下三个人间,生成一个com接口:
IDDE.idl文件如下:----------
// NOTE: no automation declarations--use MFC's built-in support for that
import "unknwn.idl";
[
object,
uuid(F8ABDECC-1F97-4d1c-B578-BB3CE2827EB1),
pointer_default(unique)
]
interface IDDE : IUnknown
{
HRESULT GetTagValue([in] BSTR plArg1, [out] long *plArg2);
HRESULT SetTagValue([in] BSTR plArg1, [in] long plArg2);
HRESULT StartThread();
HRESULT StopThread();
//HRESULT Method2([in] long lArg, [in] unsigned long ulArg);
};
IDDE.def文件如下:-------------
LIBRARY "IDDE"
DESCRIPTION 'Proxy/Stub DLL'
EXPORTS
DllGetClassObject @1 PRIVATE
DllCanUnloadNow @2 PRIVATE
GetProxyDllInfo @3 PRIVATE
DllRegisterServer @4 PRIVATE
DllUnregisterServer @5 PRIVATE
IDDE.mak文件如下:
IFACE = IDDE
$(IFACE).dll: dlldata.obj $(IFACE)_p.obj $(IFACE)_i.obj
link /dll /out:$(IFACE).dll /def:$(IFACE).def /entry:DllMain dlldata.obj $(IFACE)_p.obj \
$(IFACE)_i.obj kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib
regsvr32 /s $(IFACE).dll
dlldata.c $(IFACE)_p.c $(IFACE)_i.c $(IFACE).h : $(IFACE).idl
midl $(IFACE).idl
.c.obj:
cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL $<
clean:
@del $(IFACE).dll
@del $(IFACE).lib
@del $(IFACE).exp
@del dlldata.obj
@del $(IFACE)_p.obj
@del $(IFACE)_i.obj
当将上面的IDL文件中的SetTagValue([in] BSTR plArg1, [in] long plArg2);改为
HRESULT SetTagValue([in] BSTR plArg1, [in] float plArg2)时(将long改为float),编译出错如下:
--------------------Configuration: IDDE - Win32 Debug--------------------
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
midl IDDE.idl
Microsoft (R) MIDL Compiler Version 5.01.0164
Copyright (c) Microsoft Corp 1991-1997. All rights reserved.
Processing .\IDDE.idl
IDDE.idl
Processing C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\unknwn.idl
unknwn.idl
Processing C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\wtypes.idl
wtypes.idl
cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL dlldata.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
dlldata.c
cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL IDDE_p.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
IDDE_p.c
cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL IDDE_i.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
IDDE_i.c
link /dll /out:IDDE.dll /def:IDDE.def /entry:DllMain dlldata.obj IDDE_p.obj IDDE_i.obj kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Creating library IDDE.lib and object IDDE.exp
LIBC.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
IDDE.dll : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: 'link' : return code '0x460'
Stop.
Error executing nmake.
IDDE.dll - 3 error(s), 0 warning(s)
有需要此工程的同志请留下邮箱,我会发给你的?
我这样写接口的原因是想用MFC写COM服务器,因为用ATL写的EXE服务器不能支持MFC,而我又要用到DDE和线程之类的东西,所以只有这样?