Я удивлен, что не смог найти существующее приложение для такого рода вещей, достаточно хитов на Google, когда люди пытаются это сделать.
Хорошо, значит, DLGTEMPLATE - это блок данных переменной длины, обычно вы позволяете диалоговой функции извлекать его из пакета ресурсов, но вместо этого вы хотите сохранить его в своей программе.
Вам нужно изменить статическую библиотеку, чтобы иметь новую функцию для декодирования некоторого 'blob' обратно в dlgtemplate, и вам нужно сгенерировать BLOB-объект. (или добавьте блоб в ваш код без декодирования, о котором я не хочу сейчас думать)
Следующий код предоставит вам данные DLGTemplate, которые вам нужно вставить в ваше приложение. (вырезано из более крупного проекта)
HGLOBAL LoadResourceImpl(wchar_t *resource, wchar_t *type)
{
HRSRC handle = FindResource(hInstance, resource,type);
if (handle)
{
HGLOBAL hResource = LoadResource(hInstance, handle);
if (hResource)
return LockResource(hResource);
}
return 0;
}
DLGTEMPLATE * LoadDialog(wchar_t *resource)
{
return (DLGTEMPLATE *) LoadResourceImpl(resource,RT_DIALOG);
}
DLGTEMPLATE * LoadDialog(int resource)
{
return (DLGTEMPLATE *) LoadResourceImpl(MAKEINTRESOURCE(resource),RT_DIALOG);
}
Создайте приложение, включающее ваш ресурс - используйте соответствующий LoadDialog для получения данных.
Теперь "выпишите" этот шарик в формате, который будет включен в ваше приложение -
Шаг 1 - выясните, сколько данных имеется, пройдя структуру, чтобы найти общий размер, включая все элементы управления (счетчик элементов находится в DLGTEMPLATE :: cdit)
шаг 2 - преобразовать данные в то, что вы можете скомпилировать в ваш код - например, HEX
Добавьте в свою статическую библиотеку новый метод 'HEX' для DLGTEMPLATE и шестнадцатеричную строку, которую вы создали с помощью другого приложения.