C++ DLL注册返回代码0x80029c4a

C++ DLL注册返回代码0x80029c4a,c++,windows,com,C++,Windows,Com,我对COM编程相当陌生,我有一个可编译的DLL,但在尝试运行它时不会注册。我在这里遵循了本教程),并对其进行了修改以生成下面的代码。我不太清楚我在这里做错了什么 #pragma once #define STRICT #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0400 #endif #define _ATL_ATTRIBUTES #define _ATL_APARTMENT_THREADED #define _ATL_NO_AUTOMATIC_NAM

我对COM编程相当陌生,我有一个可编译的DLL,但在尝试运行它时不会注册。我在这里遵循了本教程),并对其进行了修改以生成下面的代码。我不太清楚我在这里做错了什么

#pragma once
#define STRICT
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#define _ATL_ATTRIBUTES
#define _ATL_APARTMENT_THREADED
#define _ATL_NO_AUTOMATIC_NAMESPACE
#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <atltypes.h>
#include <atlctl.h>
#include <atlhost.h>
using namespace ATL;

[module(type=dll, 
        name = "SMTPSink",
        version="1.0",
        uuid="0933FDCB-7CA1-41C7-BBA0-D1EF8C76F7A7",
        helpstring = "SMTPSink SMTPSink type library 1.0") ];
[ emitidl ];

//SMTP server interface functions.
//#import "oaidl.idl";
//#import "ocidl.idl";


#import "msado15.dll"  raw_interfaces_only no_namespace 
#import "cdosys.dll"  raw_interfaces_only rename_namespace("TWGSMTP") raw_native_types no_implementation
#import "seo.dll"  raw_interfaces_only no_namespace 

#include "Config_Loader.h"
using namespace TWGSMTP;
//struct IMessage;

[
   object,
   uuid("6F6CC19F-FC41-4FFD-95BD-717FFE9549E5"),
   dual,
   helpstring("Sink Interface"),
   pointer_default(unique)
]
__interface ISink : ISMTPOnArrival
{
    virtual HRESULT __stdcall OnArrival (/*[in]*/ IMessage * Msg,
        /*[in,out]*/ enum CdoEventStatus * EventStatus );
};

[
   coclass,
   threading(apartment),
   vi_progid("TWG.Sink"),
   progid("TWG.Sink.1"),
   version(1.0),
   uuid("17349758-26FD-49C0-894C-4C59D30F95CD"),
   helpstring("Sink Class")
]
class ATL_NO_VTABLE Sink: 
    public ISink
{
public:
   Sink()
   {
   }
   HRESULT __stdcall OnArrival (struct IMessage * Msg, enum CdoEventStatus * EventStatus );
   void TestMethod();

   HRESULT FinalConstruct()
   {
      return S_OK;
   }

   void FinalRelease() 
   {
   }
};
#pragma一次
#定义严格
#ifndef\u WIN32\u WINNT
#定义_WIN32_WINNT 0x0400
#恩迪夫
#定义_ATL_属性
#定义\u ATL\u公寓\u线程化
#定义自动名称空间
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间ATL;
[模块(类型=dll,
name=“SMTPSink”,
version=“1.0”,
uuid=“0933FDCB-7CA1-41C7-BBA0-D1EF8C76F7A7”,
helpstring=“SMTPSink SMTPSink类型库1.0”);
[emitidl];
//SMTP服务器接口功能。
//#导入“oaidl.idl”;
//#导入“ocidl.idl”;
#仅导入“msado15.dll”原始接口\u无\u命名空间
#导入“cdosys.dll”原始\u接口\u仅重命名\u命名空间(“TWGSMTP”)原始\u本机\u类型无\u实现
#仅导入“seo.dll”原始接口\u无\u命名空间
#包括“Config_Loader.h”
使用名称空间TWGSMTP;
//结构信息;
[
对象
uuid(“6F6CC19F-FC41-4FFD-95BD-717FFE9549E5”),
二重的
帮助字符串(“接收器接口”),
指针\u默认值(唯一)
]
__接口ISink:ISMTPOnArrival
{
虚拟HRESULT stdcall OnArrival(/*[in]*/IMessage*Msg,
/*[in,out]*/enum CdoEventStatus*事件状态);
};
[
副班,
(公寓),,
vi_progid(“TWG.Sink”),
progid(“TWG.Sink.1”),
版本(1.0),
uuid(“17349758-26FD-49C0-894C-4C59D30F95CD”),
帮助字符串(“接收器类”)
]
类ATL_NO_VTABLE接收器:
公共ISink
{
公众:
水槽()
{
}
HRESULT uu stdcall OnArrival(结构IMessage*Msg,枚举CdoEventStatus*EventStatus);
void TestMethod();
HRESULT FinalConstruct()
{
返回S_OK;
}
void FinalRelease()
{
}
};

这是我的RC文件没有

1                       TYPELIB           "SMTPSink.tlb"

线路。我一开始不知道为什么它不在那里。

这是我的RC文件没有

1                       TYPELIB           "SMTPSink.tlb"

线路。我一开始不知道它为什么不在那里。

0x80029c4a是
类型\u E\u CANTLOADLIBRARY
。您是否正在尝试将32位DLL加载到64位进程中,或者反之亦然?我的目标计算机是仅32位的windows 2003 server R2。我的RC只是缺少一个TYPELIB行。0x80029c4a是
类型库
。您是否正在尝试将32位DLL加载到64位进程中,或者反之亦然?我的目标计算机是仅32位的windows 2003 server R2。我的RC只是缺少一行TYPELIB。