1*cdf0e10cSrcweir /* 2*cdf0e10cSrcweir * Simple Application which calls the DllRegisterServer or DllUnregisterServer functions 3*cdf0e10cSrcweir * of the XMerge ActiveSync plugin. 4*cdf0e10cSrcweir */ 5*cdf0e10cSrcweir 6*cdf0e10cSrcweir 7*cdf0e10cSrcweir #include <stdio.h> 8*cdf0e10cSrcweir #include <string.h> 9*cdf0e10cSrcweir #include <windows.h> 10*cdf0e10cSrcweir 11*cdf0e10cSrcweir 12*cdf0e10cSrcweir typedef HRESULT (STDAPICALLTYPE *DLLREGISTERSERVER)(void); 13*cdf0e10cSrcweir typedef HRESULT (STDAPICALLTYPE *DLLUNREGISTERSERVER)(void); 14*cdf0e10cSrcweir 15*cdf0e10cSrcweir int main(int argc, char* argv[]) 16*cdf0e10cSrcweir { 17*cdf0e10cSrcweir BOOL bUninstall = FALSE; 18*cdf0e10cSrcweir int nPathIndex = 1; 19*cdf0e10cSrcweir 20*cdf0e10cSrcweir if (argc < 2 || argc > 3) 21*cdf0e10cSrcweir { 22*cdf0e10cSrcweir printf("\nUsage: regutil [/u] <Full Path of XMergeSync.dll>\n\n"); 23*cdf0e10cSrcweir return -1; 24*cdf0e10cSrcweir } 25*cdf0e10cSrcweir 26*cdf0e10cSrcweir 27*cdf0e10cSrcweir if (argc == 3) 28*cdf0e10cSrcweir { 29*cdf0e10cSrcweir if (strcmp("/u", argv[1])) 30*cdf0e10cSrcweir { 31*cdf0e10cSrcweir printf("\nUnrecognised option: %s\n", argv[1]); 32*cdf0e10cSrcweir return -1; 33*cdf0e10cSrcweir } 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir bUninstall = TRUE; 36*cdf0e10cSrcweir nPathIndex = 2; 37*cdf0e10cSrcweir } 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir // Dynamically load the library 41*cdf0e10cSrcweir HMODULE hmXMDll = LoadLibrary(argv[nPathIndex]); 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir if (hmXMDll == NULL) 44*cdf0e10cSrcweir { 45*cdf0e10cSrcweir printf("\nUnable to load the library %s\n", argv[nPathIndex]); 46*cdf0e10cSrcweir return -1; 47*cdf0e10cSrcweir } 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir // Get an offset to the either the DllRegisterServer or DllUnregisterServer functions 51*cdf0e10cSrcweir if (!bUninstall) 52*cdf0e10cSrcweir { 53*cdf0e10cSrcweir printf("\nRegistering %s ... ", argv[nPathIndex]); 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir DLLREGISTERSERVER DllRegisterServer = (DLLREGISTERSERVER)GetProcAddress(hmXMDll, "DllRegisterServer"); 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir if (DllRegisterServer == NULL) 58*cdf0e10cSrcweir { 59*cdf0e10cSrcweir printf("failed.\n\nDllRegisterServer is not present in library.\n"); 60*cdf0e10cSrcweir return -1; 61*cdf0e10cSrcweir } 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir // Now call the procedure ... 64*cdf0e10cSrcweir HRESULT regResult = DllRegisterServer() ; 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir if (regResult != S_OK) 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir printf("failed.\n"); 69*cdf0e10cSrcweir return -1; 70*cdf0e10cSrcweir } 71*cdf0e10cSrcweir } 72*cdf0e10cSrcweir else 73*cdf0e10cSrcweir { 74*cdf0e10cSrcweir printf("\nUnregistering %s ... ", argv[nPathIndex]); 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir DLLUNREGISTERSERVER DllUnregisterServer = (DLLUNREGISTERSERVER)GetProcAddress(hmXMDll, "DllUnregisterServer"); 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir if (DllUnregisterServer == NULL) 79*cdf0e10cSrcweir { 80*cdf0e10cSrcweir printf("failed.\n\nDllUnregisterServer is not present in library.\n"); 81*cdf0e10cSrcweir return -1; 82*cdf0e10cSrcweir } 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir // Now call the procedure ... 85*cdf0e10cSrcweir HRESULT regResult = DllUnregisterServer() ; 86*cdf0e10cSrcweir 87*cdf0e10cSrcweir if (regResult != S_OK) 88*cdf0e10cSrcweir { 89*cdf0e10cSrcweir printf("failed.\n"); 90*cdf0e10cSrcweir return -1; 91*cdf0e10cSrcweir } 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir } 94*cdf0e10cSrcweir 95*cdf0e10cSrcweir printf("done.\n"); 96*cdf0e10cSrcweir 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir // Clean up 99*cdf0e10cSrcweir FreeLibrary(hmXMDll); 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir return 0; 102*cdf0e10cSrcweir }