C++/CLI 存储过程找不到资源

C++/CLI stored procedure can't find resources

本文关键字:找不到 资源 存储过程 CLI C++      更新时间:2023-10-16

我有一些代码,这些代码在C++/CLI控制台应用程序中很好。

unsigned char* res2buffer()
{
  HMODULE HInstance = 0x00;
  try
  {
    HRSRC hrsrc = ::FindResourceW( HInstance, L"IDR_1251", RT_RCDATA);
    if( hrsrc == NULL)
    {
        return nullptr;
    }
    const size_t nsize = ::SizeofResource( HInstance, hrsrc );
    HGLOBAL hglob = ::LoadResource( HInstance, hrsrc );
    LPVOID rdata = LockResource(hglob);
    fuzzyRus = new unsigned char[ nsize ];
    ::memcpy( fuzzyRus, rdata, nsize );
    UnlockResource(hglob);
    ::FreeResource(hglob);
    return fuzzyRus;
    }
    catch(...)
    {   
    }
    return nullptr;
 }

但是is在作为存储过程生成的代码中不起作用。有线索吗?我想我必须通过HInstance,因为数字不同于0x00。问题是"什么的实例?"

您可以获得DLL的HMODULE,如下所示:

HMODULE HInstance = NULL;
GetModuleHandleEx(
    GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
    | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
    (LPCTSTR)res2buffer,
    &HInstance
);

以托管方式创建解决方案:文件必须附加在链接器选项中Input->Embedded managed Resource File->Resource\rustbl.bin

static const unsigned char*  GetRusTables() // get data from the resource file
{  
    Reflection::Assembly^ ca = Reflection::Assembly::GetExecutingAssembly();
    IO::BinaryReader^ rusres = gcnew IO::BinaryReader( ca->GetManifestResourceStream( "rustbl.bin" ) ); 
    array<unsigned char>^   buffPtr  = rusres->ReadBytes( 413032 );
    pin_ptr<unsigned char>  fuzzyRus = &buffPtr[0];
    return fuzzyRus;     
}