一个应用程序 , 有res文件 , 运行正常
为了让该程序能够容入到我的程序中 , 我把他写成了DLL
企图在别的程序中调用DLL中的函数
现在问题出来的 , 调用经常出错 , 报资源未找到之类的错误!
如果是WIN32的程序 , 那么只要我把res文件加入项目 , 编译即可。
但是我是要在.NET(C#)中,调用该DLL的函数 , 好象不行诶
我想只有两个解决方案:
1 , 把资源一起编译进DLL中
2 , 把RES加入到.Net项目中
可是 , 第一 , 我不知道怎么把资源编译进DLL中 , 第二 , 直接加入RES到.net项目 , 没用
我查了些资料 , 似乎要通过ResourceMananger来访问资源 , 而不能直接暴露出来
不知道该怎么办了

解决方案 »

  1.   

    那之后的数据访问呢?
    能像作为EXE的资源那样直接访问吗?
    还是需要使用函数?
    因为应用程序是直接访问资源的。
      

  2.   

    这是资源句柄的问题。调用DLL中函数的时候,资源句柄不正确,所以找不到资源。你这样试试看:
    每当DLL函数装载资源的时候,把第一个参数的句柄设为DLL的句柄。例如:
    用HICON LoadIcon( HINSTANCE hInstance, LPCTSTR lpIconName);
    装载一个图标时,把第一个参数设置为GetModuleHandle("Dll文件名");即
    hIcon = LoadIcon(GetMoudleHandle("dll文件名"),MAKEINTRESOURCE(IDI_ICON1));把资源编译进DLL中的方法是:把资源脚本.rc文件和资源头文件(resource.h)添加到DLL工程中,编译就行了。
      

  3.   

    yaozijian110() 说得对也可像这样
    static AFX_EXTENSION_MODULE ResDLL = { NULL, NULL };BOOL CXApp::InitInstance()
    {
    m_hResourceModule = LoadLibrary("Resource.dll");
    if (!AfxInitExtensionModule(ResDLL , m_hResourceModule))
    return 0;
    new CDynLinkLibrary(ResDLL );
    ...
    }int CXApp::ExitInstance()
    {
    // TODO: 在此添加专用代码和/或调用基类
    AfxTermExtensionModule(ResDLL );
    FreeLibrary(m_hResourceModule);
    return CWinApp::ExitInstance();
    }