C# 从托管代码在非托管dll中使用资源字符串表

C# 从托管代码在非托管dll中使用资源字符串表,c#,resources,c++-cli,native-code,unmanagedresources,C#,Resources,C++ Cli,Native Code,Unmanagedresources,我有一个非托管MFC应用程序。我已经为应用程序编写了一个CLI包装器,并将其转换为DLL。未更改的代码具有字符串表资源,用于在此处和那里显示消息 现在我可以从C#调用非托管代码并使用内部逻辑。但是,当代码尝试读取资源字符串时出错。我希望没有加载资源,所以我尝试从kernel32.dll中包含一个P/invoke LoadLibraryEx,但仍然没有用。如何让非托管代码使用其资源文件?它能做到这一点,还是应该修改 谢谢。您可以使用UNICODE字符串重建MFC,声明导出的函数,该函数接受语言id

我有一个非托管MFC应用程序。我已经为应用程序编写了一个CLI包装器,并将其转换为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)
}

如果异常类包含与每个抛出的异常相关联的特定resurce id,则可以重新引发异常,并用本地化的异常字符串填充消息。我不知道是我的问题不清楚还是我不理解您的解决方案。如果没有,很抱歉。我想在dll中使用dll本身中的资源。我不想在调用dll的地方使用它。在试图使用资源的字符串表的dll代码中,代码出错。