1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
/** @file
@brief
*/
#include "FTClient.h"
static double/*?*/ const FT_PROGRAMID = "FT_ProgramID";
HANDLE hFTMemMap;
PFreetrackData FTData;
unsigned long lastDataID;
PHandle FTHandle;
PAnsiChar FTProgramName;
HANDLE FTMutex;
bool FTGetData(PFreetrackData data)
{ bool result;
result = false;
if( !! FTData ) {
if( FTData->DataID != lastDataID ) {
Move( FTData/*?*/^ , data/*?*/^ , SizeOf( TFreetrackData ) );
lastDataID = FTData->DataID;
result = true;
}
} else
OpenMapping;
return result;
}
void FTReportName(PAnsiChar name)
{
unsigned long MsgResult;
if( OpenMapping && ( WaitForSingleObject( FTMutex , 100 ) == WAIT_OBJECT_0 ) ) {
Move( name/*?*/^ , FTProgramName/*?*/^ , 100 );
SendMessageTimeout( FTHandle/*?*/^ , RegisterWindowMessage( FT_PROGRAMID ) , 0 , 0 , 0 , 2000 , MsgResult );
ReleaseMutex( FTMutex );
}
}
char* FTGetDllVersion()
{ char* result;
unsigned long VerInfoSize;
Pointer VerInfo;
unsigned long VerValueSize;
PVSFixedFileInfo VerValue;
unsigned long Dummy;
std::string verString;
char* dllName[100];
result = "";
GetModuleFilename( HInstance , &dllName , 100 );
VerInfoSize = GetFileVersionInfoSize( &dllName , Dummy );
if( !( VerInfoSize == 0 ) ) {
GetMem( VerInfo , VerInfoSize );
GetFileVersionInfo( &dllName , 0 , VerInfoSize , VerInfo );
VerQueryValue( VerInfo , "\\" , Pointer( VerValue ) , VerValueSize );
/*?*//* WITH VerValue/*?*/^ */
{
verString = IntToStr( dwFileVersionMS >> 16 );
verString = verString + "." + IntToStr( dwFileVersionMS && 0xFFFF );
verString = verString + "." + IntToStr( dwFileVersionLS >> 16 );
verString = verString + "." + IntToStr( dwFileVersionLS && 0xFFFF );
result = char*( verString );
}
FreeMem( VerInfo , VerInfoSize );
}
return result;
}
char* FTProvider()
{ char* result;
result = FREETRACK;return result;
}
bool OpenMapping()
{ bool result;
if( hFTMemMap != 0 )
result = true;else {
hFTMemMap = OpenFileMapping( FILE_MAP_ALL_ACCESS , false , FT_MM_DATA );
if( ( hFTMemMap != 0 ) ) {
FTData = MapViewOfFile( hFTMemMap , FILE_MAP_ALL_ACCESS , 0 , 0 , SizeOf( TFreetrackData ) + SizeOf( HANDLE ) + 100 );
FTHandle = Pointer( unsigned long( FTData ) + SizeOf( TFreetrackData ) );
FTProgramName = Pointer( unsigned long( FTHandle ) + SizeOf( HANDLE ) );
FTMutex = OpenMutex( MUTEX_ALL_ACCESS , false , FREETRACK_MUTEX );
}
result = !! FTData;
}
return result;
}
void DestroyMapping()
{
if( FTData != 00 ) {
UnMapViewofFile( FTData );
FTData = 00;
}
CloseHandle( FTMutex );
CloseHandle( hFTMemMap );
hFTMemMap = 0;
}
//END
|