高分求解CE下生成動態庫的問題


本人想將一個VC6下做的動態庫用VS2008重新做一個能在WINCE下用的庫。我是創建了智能設備DLL的項目,然后把VC6下面的源代碼搬到項目中,多字符集轉UNICODE的整好了,最后跳出一個系統錯誤。具體調試信息如下:

//編譯提示
------ 已啟動生成: 項目: CETalkDll, 配置: Debug My Device Emulator (ARMV4I) ------
正在編譯...
stdafx.cpp
_CE_ACTIVEX was not defined because this Windows CE SDK does not have DCOM.
 _CE_ACTIVEX could be caused to be defined by defining _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA, but it is recommended that this be done only for single-threaded apps.
_ATL_NO_HOSTING was defined because _CE_ACTIVEX was not defined.
正在編譯...
AudioCode.cpp
WaveOut.cpp
WaveIn.cpp
UdpSocket.cpp
SortData.cpp
SendClient.cpp
RecSocket.cpp
MyWaveIn.cpp
MixOut.cpp
MixIn.cpp
ListenSocket.cpp
Interface.cpp
ClientSocket.cpp
CETalkDll.cpp
D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\atlmfc\include\afxdllx.h(59) : error C2039: “m_pClassInit”: 不是“AFX_MODULE_STATE”的成員
        D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\atlmfc\include\afxstat_.h(216) : 參見“AFX_MODULE_STATE”的聲明
D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\atlmfc\include\afxdllx.h(60) : error C2039: “m_pFactoryInit”: 不是“AFX_MODULE_STATE”的成員
        D:\Program Files\Microsoft Visual Studio 9.0\VC\ce\atlmfc\include\afxstat_.h(216) : 參見“AFX_MODULE_STATE”的聲明
正在生成代碼...
生成日志保存在“file://d:\test\CETalkDll\CETalkDll\My Device Emulator (ARMV4I)\Debug\BuildLog.htm”
CETalkDll - 3 個錯誤,0 個警告
========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========
========== 部署: 成功 0 個,失敗 0 個,跳過 0 個 ==========


_CE_ACTIVEX was not defined because this Windows CE SDK does not have DCOM.
 _CE_ACTIVEX could be caused to be defined by defining _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA, but it is recommended that this be done only for single-threaded apps.
_ATL_NO_HOSTING was defined because _CE_ACTIVEX was not defined.

這段貌似說操作系統版本沒定義?不確定意思,請高人幫忙。
“m_pClassInit”: 不是“AFX_MODULE_STATE”的成員 這個是什么情況?

4 个解决方案

#1



//afxdllx.h文件
#pragma once

// Startup code must be unmanaged to avoid loader lock issues.
#pragma managed(push, off)

#ifdef _AFX_MINREBUILD
#pragma component(minrebuild, off)
#endif 

// The following symbol used to force inclusion of this module for _AFXEXT
#if defined(_M_IX86) || defined(_M_SH)
extern "C" { int _afxForceEXTDLL; }
#else
extern "C" { int __afxForceEXTDLL; }
#endif

/////////////////////////////////////////////////////////////////////////////
// RawDllMain that saves current app class list and factory list

extern "C" BOOL WINAPI ExtRawDllMain(HINSTANCE, DWORD dwReason, LPVOID);
#ifndef _WIN32_WCE
extern "C" BOOL (WINAPI* const _pRawDllMain)(HINSTANCE, DWORD, LPVOID) = &ExtRawDllMain;
#else
extern "C" BOOL (WINAPI* const _pAtlChainRawDllMain)(HINSTANCE, DWORD, LPVOID) = &ExtRawDllMain;
#endif // !_WIN32_WCE

extern "C"
BOOL WINAPI ExtRawDllMain(HINSTANCE, DWORD dwReason, LPVOID)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
// save critical data pointers before running the constructors
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
pModuleState->m_pClassInit = pModuleState->m_classList;
pModuleState->m_pFactoryInit = pModuleState->m_factoryList;
pModuleState->m_classList.m_pHead = NULL;
pModuleState->m_factoryList.m_pHead = NULL;
}
return TRUE;    // ok
}

#ifdef _AFX_MINREBUILD
#pragma component(minrebuild, on)
#endif

/////////////////////////////////////////////////////////////////////////////

#pragma managed(pop)

下面是預處理器配置
//

_DEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;WINCE;_USRDLL;$(ARCHFAM);$(_ARCHFAM_);STANDARDSHELL_UI_MODEL

#2



// stdafx.h : 標准系統包含文件的包含文件,
// 或是經常使用但不常更改的
// 特定於項目的包含文件

#pragma once

// 注意 - 這個值與作為目標的 Windows CE OS 版本的關聯性並不強
#define WINVER _WIN32_WCE

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 從 Windows 頭中排除極少使用的資料
#endif

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 構造函數將是顯式的

#ifdef _CE_DCOM
#define _ATL_APARTMENT_THREADED
#endif

#include <ceconfig.h>
#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
#define SHELL_AYGSHELL
#endif

#include <afxwin.h>         // MFC 核心組件和標准組件
#include <afxext.h>         // MFC 擴展

#ifndef _AFX_NO_OLE_SUPPORT
#include <afxole.h>         // MFC OLE 類
#include <afxodlgs.h>       // MFC OLE 對話框類
#include <afxdisp.h>        // MFC 自動化類
#endif // _AFX_NO_OLE_SUPPORT

#include <afxdtctl.h> // MFC 對 Internet Explorer 4 公共控件的支持
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 對 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT


#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
#ifndef _DEVICE_RESOLUTION_AWARE
#define _DEVICE_RESOLUTION_AWARE
#endif
#endif

#ifdef _DEVICE_RESOLUTION_AWARE
#include "DeviceResolutionAware.h"
#endif


#ifdef SHELL_AYGSHELL
#include <aygshell.h>
#pragma comment(lib, "aygshell.lib") 
#endif // SHELL_AYGSHELL

#if (_WIN32_WCE < 0x500) && ( defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP) )
#pragma comment(lib, "ccrtrtti.lib")
#ifdef _X86_
#if defined(_DEBUG)
#pragma comment(lib, "libcmtx86d.lib")
#else
#pragma comment(lib, "libcmtx86.lib")
#endif
#endif
#endif

#include <altcecrt.h>

#3


該回復於2012-10-18 13:04:34被版主刪除

#4


問題解決了嗎?我也遇到跟你一樣的問題,如果解決了能否分享一下?萬分感謝!!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com