我在VS2005里面用ATL写了一个组件,平台是mobile(Smart Device),现在在EVC下面注册以后就可以用了,可是我想把它导入到VC2005的TOOLBOX里面,出现了自注册失败的消息,我在PC上面用regsvr32注册,却注册失败,我想问一下我应该怎么才可以让它注册成功啊?
我认为可以注册成功,因为TOOLBOX里面的标准空间应该也是ActiveX控件,在PC和mobile下面都可以用,所以我认为可以注册成功,可是不知道要怎么做,那位知道给指点一下啊,谢谢了!

解决方案 »

  1.   

    regsvr32 失败返回什么错误???
      

  2.   

    错误信息:"XXX.DLL"不是一个可执行的文件;没有为这个文件类型注册的注册帮助程序.这是怎么回事啊?
    谢谢!
      

  3.   

    控件里没有导出DllRegisterServer函数?
      

  4.   

    不关平台的事情吗?
    会不会是因为在Mobile平台开发的COM组件,不能在XP上面注册啊?
      

  5.   

    ouyh12345, 我才学COM,你能说具体一点吗?谢谢啊!
      

  6.   

    我现在就是建一个基本的ATL工程,平台是Mobile(Smart Device),添加一个类,编译生成一个.dll文件,然后把这个DLL拷贝到system目录下面,在运行里面输入regsvr32 XXX.dll 注册,就不成功,
    错误信息: "XXX.DLL "不是一个可执行的文件;没有为这个文件类型注册的注册帮助程序. 
    我想问一下是怎么回事啊?
      

  7.   

    // Test4.cpp : Implementation of DLL Exports.
    #include "stdafx.h"
    #ifdef POCKETPC2003_UI_MODEL
    #include "resourceppc.h"
    #endif 
    #include "Test4.h"class CTest4Module : public CAtlDllModuleT< CTest4Module >
    {
    public :
    DECLARE_LIBID(LIBID_Test4Lib)
    #ifndef _CE_DCOM
    DECLARE_REGISTRY_APPID_RESOURCEID(IDR_TEST4, "{5033686B-E410-4FE6-AD65-8A478A131938}")
    #endif
    };CTest4Module _AtlModule;
    // DLL Entry Point
    extern "C" BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    hInstance;
        return _AtlModule.DllMain(dwReason, lpReserved); 
    }
    // Used to determine whether the DLL can be unloaded by OLE
    STDAPI DllCanUnloadNow(void)
    {
        return _AtlModule.DllCanUnloadNow();
    }
    // Returns a class factory to create an object of the requested type
    STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
    {
        return _AtlModule.DllGetClassObject(rclsid, riid, ppv);
    }
    // DllRegisterServer - Adds entries to the system registry
    STDAPI DllRegisterServer(void)
    {
        // registers object, typelib and all interfaces in typelib
        HRESULT hr = _AtlModule.DllRegisterServer();
    return hr;
    }
    // DllUnregisterServer - Removes entries from the system registry
    STDAPI DllUnregisterServer(void)
    {
    HRESULT hr = _AtlModule.DllUnregisterServer(FALSE);
    return hr;
    }
    这里面需要修改什么吗?这是系统生成的啊!
      

  8.   

    不会Mobile。
    但以上的代码貌似没问题。
      

  9.   

    我要在wince下使用一个xplug.ocx,但是不知道往那里拷贝,因为wince下没有 
    system32,是不是wince不能使用axtivex 
    --------------------------------------------------------------- 首先:在开发环境下注册的控件,是注册到了本机的系统下,也就是我们正在使用的操作系统下。所以不能在CE的模拟器中运行,因模拟环境本身没有注册控件。 
    有一个比笨的解决方法,就是编译2个版本的该控件,当然要有相同的GUID,CLASSID之类的信息。所以就是在:VC(也可以是其它)写一个,然后在EVC中用同样的文件名建立一个控件工程,把VC下的copy 过来,但不要覆盖工程文件,把含GUID的文件,你的代码的文件覆盖EVC下的文件,这样有相同的属性的一个控件就成了,通过编译,在模拟环境下就建立一个你的控件的注册。你可以在设计环境下使用,在CE下就可以显示了 网上有一个这样的说法,可是具体还不知道怎么做,有知道的给说一下啊.谢谢