我有一个非托管MFC应用程序。我为应用程序编写了一个CLI包装器,并将其转换为一个DLL。未经处理的代码具有用于在这里和那里显示消息的字符串表资源。在托管代码中使用非托管dll中的资源字符串表
现在我可以调用C#中的非托管代码并使用内部逻辑。但是当它试图读取资源字符串时,代码出错了。我希望资源没有加载,所以我尝试从kernel32.dll中包含一个P/invoke LoadLibraryEx,但仍然没有用。我如何让非托管代码使用其资源文件?它可以这样做,还是应该修改?
谢谢。
我有一个非托管MFC应用程序。我为应用程序编写了一个CLI包装器,并将其转换为一个DLL。未经处理的代码具有用于在这里和那里显示消息的字符串表资源。在托管代码中使用非托管dll中的资源字符串表
现在我可以调用C#中的非托管代码并使用内部逻辑。但是当它试图读取资源字符串时,代码出错了。我希望资源没有加载,所以我尝试从kernel32.dll中包含一个P/invoke LoadLibraryEx,但仍然没有用。我如何让非托管代码使用其资源文件?它可以这样做,还是应该修改?
谢谢。
您可以使用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)
}
我不知道我是否让我的问题不清楚,或者我没有理解您的解决方案。对不起,如果没有。我想使用该dll内的dll内部的资源。我不想在dll被调用的地方使用它。代码错误出现在试图使用资源字符串表的dll代码中。 –
可以重新抛出异常,与本地化异常字符串填写消息,如果你的异常类包含一个特别是恢复与每个抛出的异常相关的id。 –