Используйте это:
public abstract class AbstractDAProcedureMenuReceivedHandler<T extends AbstractDAProcedureMenuReceivedEvent> extends DaCommonEventHandler<T> {
private static final Logger logger = LoggerFactory.getLogger ( AbstractDAProcedureMenuReceivedHandler.class);
_wmainCRTStartup является функцией, которая называет wmain ()
IIRC это должно быть доступно в некотором.o файле, с которым можно связаться, посмотрите в каталоге lib.
Возможно, это - полезное чтение также: Уменьшите EXE и Размер DLL с LIBCTINY.LIB (и скалы Matt Pietrek :-)
Ну, отвечая мне здесь, таким образом, в случае, если кто-то еще находит эту страницу, ища информацию.
Как рекомендуемый MSalters, код cookie безопасности может быть украден от источника CRT, но выполнение этого я нашел что /GS-
флаг компилятора может использоваться для предотвращения материала безопасности в целом.
Как SoapBox заявил, API-функции должны быть __stdcall
, а также точка входа делает. Я устранил проблему точки входа с флагом командной строки компоновщика /entry:wmain
.
И наконец, как Tomek указал, API-функции должны быть в экстерне C!
Так:
#pragma comment(lib, "kernel32.lib")
typedef int(*FARPROC)();
extern "C" {
void* __stdcall LoadLibraryW( wchar_t* lpLibFileName );
FARPROC __stdcall GetProcAddress( void* hModule, char* lpProcName );
int __stdcall FreeLibrary( void* hLibModule );
typedef int (__stdcall *f_MessageBoxW_t)( unsigned long hWnd, wchar_t* lpText, wchar_t* lpCaption, unsigned long uType);
f_MessageBoxW_t fnMsg;
void* hUser;
};
int __stdcall wmain(int argc, wchar_t* argv[])
{
hUser = LoadLibraryW( L"user32.dll" );
fnMsg = (f_MessageBoxW_t)GetProcAddress( hUser, "MessageBoxW" );
fnMsg( 0, L"foo", L"bar", 0 );
FreeLibrary( hUser );
return 0;
}
Можно посмотреть в Windows.h для наблюдения прототипов, в которых Вы нуждаетесь для своего импорта kernel32. В целом функции окон определяются WINAPI
который является на самом деле __stdcall
и нет __cdecl
. Это решит ту проблему, по крайней мере.
Что касается Вашей другой проблемы, необходимо исследовать параметры командной строки компоновщика и видеть, существует ли способ заставить ее не искать вещи от CRT. Я не знаю, существует ли способ сделать это или нет. Но Вы оказываетесь перед необходимостью находить путь или определять те функции Ваш сам (который Вы, вероятно, не хотите делать).
Я рекомендовал бы просто использовать другой компилятор/компоновщика.
Надлежащая точка входа main()
, нет wmain()
(так как Вы компилируете консольное приложение). Код cookie безопасности может быть украден из исходного кода CRT; никакая потребность связать его в.
Необходимо объявить функции windows.h как экстерн "C".