2011-09-14 120 views
1

我有一个非托管MFC应用程序。我为应用程序编写了一个CLI包装器,并将其转换为一个DLL。未经处理的代码具有用于在这里和那里显示消息的字符串表资源。在托管代码中使用非托管dll中的资源字符串表

现在我可以调用C#中的非托管代码并使用内部逻辑。但是当它试图读取资源字符串时,代码出错了。我希望资源没有加载,所以我尝试从kernel32.dll中包含一个P/invoke LoadLibraryEx,但仍然没有用。我如何让非托管代码使用其资源文件?它可以这样做,还是应该修改?

谢谢。

+0

可以重新抛出异常,与本地化异常字符串填写消息,如果你的异常类包含一个特别是恢复与每个抛出的异常相关的id。 –

回答

0

您可以使用UNICODE字符串重新构建MFC,声明导出函数,使用语言ID,资源字符串ID以及返回该引用ID和语言环境的字符串。

而且在管理组件如下

[DllImport("resource.en-US.dll")] 
string GetResourceString(int LANGUAGE_ID, int IID); 

使用它,并,例如:

try 
{ 
    ... 
} 
catch(MyException ex) 
{ 
    throw new ApplicationException(GetResourceString(ex.Language, ex.ResourceID), ex) 
} 
+0

我不知道我是否让我的问题不清楚,或者我没有理解您的解决方案。对不起,如果没有。我想使用该dll内的dll内部的资源。我不想在dll被调用的地方使用它。代码错误出现在试图使用资源字符串表的dll代码中。 –