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

时间:2013-11-25 16:55:49

标签: c++ sql-server command-line-interface

我有一些在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;
 }

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

2 个答案:

答案 0 :(得分:0)

您可以像这样获取DLL的HMODULE

HMODULE HInstance = NULL;

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

答案 1 :(得分:0)

以托管方式创建解决方案:文件必须附加到链接器选项 输入 - >嵌入式托管资源文件 - > 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;     
}