вставлять ресурс в нативный exe из c #

Я хочу встроить ресурс в исполняемый файл с помощью C #.

Если я использую код C ++, он работает хорошо:

UpdateResource(hResource,RT_RCDATA,MAKEINTRESOURCE(104),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPVOID)text,FileSize);

C # код, который я использую:

 IntPtr handle = BeginUpdateResource(this.NomeFileCryptato, false);
IntPtr fileptr = ToPtr(encrypted);
bool res = UpdateResource(handle, "RT_RCDATA", "104", 1040, fileptr,     Convert.ToUInt32(encrypted.Length));
EndUpdateResource(handle, false);

На самом деле, код c # встраивает ресурс в exe-файл (назовем его a.exe), но если я встраиваю ресурс с помощью c ++, a.exe может читать и извлекать, если я встраиваю из c #, a.exe не может.

есть идеи?


это объявление об обновлении ресурса в c #:

 [DllImport("kernel32.dll", SetLastError = true)]
static extern bool UpdateResource(IntPtr hUpdate, string lpType, string lpName, ushort wLanguage,   IntPtr lpData, uint cbData);

lpType и lpName обе строки, и если я использую
UpdateResource (дескриптор, «RT_RCDATA», «104», 1040, fileptr, Convert.ToUInt32 (encrypted.Length));
UpdateResource добавить ресурс правильно в исполняемый файл.

Проблема была на с ++. Чтобы добраться до ресурса, добавленного из c #, я должен использовать LPCSTR без использования макроса makeintresource.

LPCSTR nome = "CDATA";
LPCSTR tipo = "104";
hLibrary = LoadLibrary(this->filename);
hResource = FindResource(hLibrary, tipo, nome);

Еще раз спасибо за ваше время!

0

Решение

Вы, кажется, передаете неправильные значения, и, поскольку они не отображаются, я предполагаю, что ваши функции (ToPtr, BeginUpdateResource, UpdateResource, а также EndUpdateResource) также может быть неправильно определено.

Обратите внимание, что MAKEINTRESOURCE(104) преобразует целочисленное значение 104 в строковый указатель; это не создает строку со значением "104", так же RT_RCDATA вероятно, макрос для значения, отличного от "RT_RCDATA", такие как MAKEINTRESOURCE(10).

Итак, начнем с самого начала. Что означает ваша декларация UpdateResource выглядит как? Я быстро нашел два противоречивых примера:

Первое затрудняет обработку целочисленных идентификаторов; второе затрудняет работу со строками. Я полагаю, я бы хотел использовать IntPtr для параметров типа и имени.

После того, как вы разберетесь с этим, следующим моментом будет понимание того, что MAKEINTRESOURCE Макроэквивалент находится в C #. И это требует понимания того, как MAKEINTRESOURCE переправляет целые числа в указатели. Как только вы поймете это, легко сказать, что вам нужно передать здесь, чтобы передать целые числа 104 или 10 в UpdateResource,

1

Другие решения


По вопросам рекламы [email protected]