From 0f3cba6fcea0ffd511dfe3275d57a5b9e69be5be Mon Sep 17 00:00:00 2001 From: Ash Wolf Date: Mon, 10 Jul 2023 02:10:20 +0100 Subject: build a barely-tested Burger plugin --- src/Plugins/Food/Burger/Burger.cpp | 63 +++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 7 deletions(-) (limited to 'src/Plugins/Food/Burger/Burger.cpp') diff --git a/src/Plugins/Food/Burger/Burger.cpp b/src/Plugins/Food/Burger/Burger.cpp index e18f508..2e9f301 100644 --- a/src/Plugins/Food/Burger/Burger.cpp +++ b/src/Plugins/Food/Burger/Burger.cpp @@ -1,5 +1,9 @@ +// Burger.cpp : Defines the initialization routines for the DLL. +// + +#include "stdafx.h" #include "Burger.h" -#include "T2PluginSpecifier.h" +#include "../../../T2DLL/T2PluginSpecifier.h" #include "../Common/FoodDef.h" #include "../Common/FoodPlugin.h" @@ -9,27 +13,70 @@ static char THIS_FILE[] = __FILE__; #endif +// +// Note! +// +// If this DLL is dynamically linked against the MFC +// DLLs, any functions exported from this DLL which +// call into MFC must have the AFX_MANAGE_STATE macro +// added at the very beginning of the function. +// +// For example: +// +// extern "C" BOOL PASCAL EXPORT ExportedFunction() +// { +// AFX_MANAGE_STATE(AfxGetStaticModuleState()); +// // normal function body here +// } +// +// It is very important that this macro appear in each +// function, prior to any calls into MFC. This means that +// it must appear as the first statement within the +// function, even before any object variable declarations +// as their constructors may generate calls into the MFC +// DLL. +// +// Please see MFC Technical Notes 33 and 58 for additional +// details. +// + +///////////////////////////////////////////////////////////////////////////// +// CBurgerApp + BEGIN_MESSAGE_MAP(CBurgerApp, CWinApp) + //{{AFX_MSG_MAP(CBurgerApp) + // NOTE - the ClassWizard will add and remove mapping macros here. + // DO NOT EDIT what you see in these blocks of generated code! + //}}AFX_MSG_MAP END_MESSAGE_MAP() -CBurgerApp::CBurgerApp() { +///////////////////////////////////////////////////////////////////////////// +// CBurgerApp construction + +CBurgerApp::CBurgerApp() +{ } +///////////////////////////////////////////////////////////////////////////// +// The one and only CBurgerApp object + CBurgerApp theApp; FoodPlugin *sFoodPlugin; FoodDef *sFoodDef; -extern "C" void *AFX_EXT_API CALLBACK ConstructProgramPlugin(T2PluginSpecifier *inSpecifier) { +#pragma comment(linker, "/export:ConstructProgramPlugin=_ConstructProgramPlugin@4") +extern "C" void *CALLBACK ConstructProgramPlugin(T2PluginSpecifier *inSpecifier) { if (!sFoodPlugin) { #line 88 - sFoodPlugin = new FoodPlugin('TnPl', inSpecifier); + sFoodPlugin = new FoodPlugin('TnPl', *inSpecifier); } return sFoodPlugin; } -extern "C" void *AFX_EXT_API CALLBACK ConstructTemplatePlugin(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) { +#pragma comment(linker, "/export:ConstructTemplatePlugin=_ConstructTemplatePlugin@16") +extern "C" void *CALLBACK ConstructTemplatePlugin(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) { if (!sFoodDef) { #line 101 sFoodDef = new FoodDef('TnDf', *inSpecifier, inResFile, inWorldDef, inPlugin); @@ -38,7 +85,8 @@ extern "C" void *AFX_EXT_API CALLBACK ConstructTemplatePlugin(T2PluginSpecifier return sFoodDef; } -extern "C" void *AFX_EXT_API CALLBACK DestructProgramPlugin() { +#pragma comment(linker, "/export:DestructProgramPlugin=_DestructProgramPlugin@0") +extern "C" void *CALLBACK DestructProgramPlugin() { delete sFoodPlugin; sFoodPlugin = NULL; @@ -48,7 +96,8 @@ extern "C" void *AFX_EXT_API CALLBACK DestructProgramPlugin() { return NULL; } -extern "C" T2PluginSpecifier *AFX_EXT_API CALLBACK GetAttr(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) { +#pragma comment(linker, "/export:GetAttr=_GetAttr@16") +extern "C" T2PluginSpecifier *CALLBACK GetAttr(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) { #line 120 T2PluginSpecifier *specifier = new T2PluginSpecifier; specifier->mPluginName = "Burgar"; -- cgit v1.2.3