我在dll中有一个静态函数,它使用LoadString()从资源加载字符串。当我从那个dll调用这个函数时一切正常。但是,当我从其他模块(activeX控件)调用此函数时,LoadString失败,错误为ERROR_RESOURCE_NAME_NOT_FOUND。我尝试使用AFX_MANAGE_STATE宏,但它没有帮助。有谁知道这里有什么问题,解决方案是什么?
答案 0 :(得分:6)
如果字符串位于不同dll的资源中,则必须从其他模块设置资源句柄以使其工作。尝试使用AfxSetResourceHandle方法设置资源句柄。
答案 1 :(得分:5)
如果未将模块实例的句柄传递给LoadString
,则它使用默认资源句柄。默认情况下,默认资源句柄设置为当前模块句柄。因此,如果您从具有必需字符串的模块调用LoadString
,那么一切正常。如果您从其他模块中调用LoadString
,则无法找到所需的字符串,您将收到错误ERROR_RESOURCE_NAME_NOT_FOUND
。您可以通过调用AfxSetResourceHandle
函数来覆盖它。
或者您可以通过将资源句柄传递给LoadString
来明确选择具有资源的模块。
答案 2 :(得分:2)
请确保在函数开头调用AFX_MANAGE_STATE,以便加载适当的(dll或exe)资源。 也可以看看: http://msdn.microsoft.com/en-us/library/ba9d5yh5(VS.80).aspx