Code: Select all
C:POI:SelectedTargetName
Does anyone know ? Thanks.
Code: Select all
C:POI:SelectedTargetName
Hi, thanks your reply, I try this method, but when I compile the code, there some warning show.JB3DG wrote: ↑Mon Dec 16, 2019 9:42 am This might help:
https://forums.vrsimulations.com/suppor ... ia_C.2B.2B
Code: Select all
LNK2020 unresolved token ImportTable
LNK2001 unresolved external symbol ImportTable
LNK1120 2 unresolved externals
GAUGESIMPORT ImportTable = {
{ 0x0000000F, (PPANELS)NULL },
{ 0x00000000, NULL }
};
GAUGESLINKAGE Linkage =
{
0x00000013,
module_init,
module_deinit,
0,
0,
FS9LINK_VERSION,
{
&gaugehdr_ACM,
&gaugehdr_Sys,
0
}
};
Code: Select all
#include "gauges.h"
void DataCollector::OnFrame(IParameterListV400* pParams)
{
IPanelCCallback *pPCC_TPUtil = panel_get_registered_c_callback("VRSTP_Util");
IAircraftCCallback *pACC_TPUtil = pPCC_TPUtil->CreateAircraftCCallback(0);
IGaugeCCallback *pGCC_TPUtil = pACC_TPUtil->CreateGaugeCCallback();
};
Code: Select all
#define panel_get_registered_c_callback (ImportTable.PANELSentry.fnptr->panel_get_registered_c_callback)
#define panel_get_aircraft_c_callback (ImportTable.PANELSentry.fnptr->panel_get_aircraft_c_callback)
#define send_key_event (ImportTable.PANELSentry.fnptr->send_key_event)
#define register_key_event_handler (ImportTable.PANELSentry.fnptr->register_key_event_handler)
#define unregister_key_event_handler (ImportTable.PANELSentry.fnptr->unregister_key_event_handler)
#define process_shared_event_out ( ImportTable.PANELSentry.fnptr->process_shared_event_out)
#define is_master ( ImportTable.PANELSentry.fnptr->is_master)
#define set_named_variable_value_sync (ImportTable.PANELSentry.fnptr->set_named_variable_value_sync)
#define set_named_variable_sync_enabled (ImportTable.PANELSentry.fnptr->set_named_variable_sync_enabled)
#define get_event_description (ImportTable.PANELSentry.fnptr->get_event_description)
#define get_event_token_string (ImportTable.PANELSentry.fnptr->get_event_token_string)
#define query_pdk (ImportTable.PANELSentry.fnptr->query_pdk)
#define get_event_count (ImportTable.PANELSentry.fnptr->get_event_count)
#define get_event_id_by_index (ImportTable.PANELSentry.fnptr->get_event_id_by_index)
// This is the gauge's import table definition
typedef struct GAUGESIMPORT
{
struct
{
ID fnID;
PPANELS fnptr;
}PANELSentry;
struct
{
ID fnID;
PVOID fnptr;
}nullentry;
} GAUGESIMPORT, *PGAUGESIMPORT;
EXTERN_C DECLSPEC_EXPORT GAUGESIMPORT ImportTable;
#if defined(_MSC_VER)
#pragma warning( push )
#pragma warning( disable:4200 )
#endif
// This is the module's export table definition
typedef struct GAUGESLINKAGE
{
FSLINKAGE
PGAUGEHDR gauge_header_ptr[];
} GAUGESLINKAGE, *PGAUGESLINKAGE, **PPGAUGESLINKAGE;
#if defined(_MSC_VER)
#pragma warning( pop )
#endif
EXTERN_C DECLSPEC_EXPORT GAUGESLINKAGE Linkage;
Hi, here is my code.
Code: Select all
PPANELS Panels = NULL;
GAUGESIMPORT ImportTable =
{
{0x0000000F, (PPANELS)NULL},
{0x00000000, NULL}
};
My_DataCollector::My_DataCollector()
{
//Init
ImportTable.PANELSentry.fnptr = (PPANELS)Panels;
};
void My_DataCollector::OnFrame(IParameterListV400* pParams)
{
IPanelCCallback *pPCC_TPUtil = panel_get_registered_c_callback("VRSTP_Radar");
IAircraftCCallback *pACC_TPUtil = pPCC_TPUtil->CreateAircraftCCallback(0);
IGaugeCCallback *pGCC_TPUtil = pACC_TPUtil->CreateGaugeCCallback();
SINT32 ID = 0;
pPCC_TPUtil->ConvertStringToProperty("Mode4Code", &ID);
FLOAT64 fReadVal = 0;
pGCC_TPUtil->GetPropertyValue(ID, &fReadVal);
};
Code: Select all
System.NullReferenceException: Object reference not set to an instance of an object.
Yes, finally I got the custom variable, I also find you must add a .def file and set in linker, so P3D will know to set Panel pointer.
Code: Select all
#include "initpdk.h"
#include "gauges.h"
using namespace P3D;
PPANELS Panels = NULL;
GAUGESIMPORT ImportTable =
{
{0x0000000F, (PPANELS)NULL},
{0x00000000, NULL}
};
extern "C" __declspec(dllexport) void __stdcall DLLStart(__in __notnull IPdk* pPdk)
{
if (pPdk != nullptr && NULL != Panels)
{
//The Panels pointer will get filled in during the loading process
ImportTable.PANELSentry.fnptr = (PPANELS)Panels;
//Start Your Program
s_My_DataCollector = new My_DataCollector;
}
}
extern "C" __declspec(dllexport) void __stdcall DLLStop(void)
{
//End Program
delete s_My_DataCollector;
}
Code: Select all
LIBRARY
EXPORTS
Panels
DLLStart
DLLStop
Code: Select all
void My_DataCollector::Update(CComPtr<IBaseObjectV400> &userObj)
{
//Get Custom Variable
IPanelCCallback *pPCC_TPUtil = panel_get_registered_c_callback("Module_Name");
IAircraftCCallback *pACC_TPUtil = pPCC_TPUtil->CreateAircraftCCallback(0);
IGaugeCCallback *pGCC_TPUtil = pACC_TPUtil->CreateGaugeCCallback();
SINT32 ID = 0;
pPCC_TPUtil->ConvertStringToProperty("Variable_Name", &ID);
FLOAT64 fReadVal = 0;
pGCC_TPUtil->GetPropertyValue(ID, &fReadVal);
//This is what you want
fReadVal;
};