]> git.sesse.net Git - vlc/commitdiff
- install axvlc.dll within the VLC directory, rather than WINDOWS
authorDamien Fouilleul <damienf@videolan.org>
Wed, 2 Mar 2005 13:45:45 +0000 (13:45 +0000)
committerDamien Fouilleul <damienf@videolan.org>
Wed, 2 Mar 2005 13:45:45 +0000 (13:45 +0000)
- DllRegisterServer modified to use current DLL path when registering control

activex/main.cpp
vlc.win32.nsi

index 1ad9f57248357af3d7dad6fda701105d6fa0f148..a1500da2efcdd76b431a0bb45a4524132e7d2176 100644 (file)
@@ -28,7 +28,6 @@
 \r
 using namespace std;\r
 \r
-#define COMDLLPATH   "axvlc.dll"\r
 #define THREADING_MODEL "Both"\r
 #define COMPANY_STR "VideoLAN"\r
 #define PROGRAM_STR "VLCPlugin"\r
@@ -147,6 +146,7 @@ STDAPI DllUnregisterServer(VOID)
         SHDeleteKey(hClsIDKey, psz_CLSID);\r
         RegCloseKey(hClsIDKey);\r
     }\r
+    CoTaskMemFree((void *)psz_CLSID);\r
 \r
     return S_OK;\r
 };\r
@@ -155,6 +155,11 @@ STDAPI DllRegisterServer(VOID)
 {\r
     DllUnregisterServer();\r
 \r
+    char DllPath[MAX_PATH];\r
+    DWORD DllPathLen= GetModuleFileName(h_instance, DllPath, sizeof(DllPath)) ;\r
+       if( 0 == DllPathLen )\r
+        return E_FAIL;\r
+\r
     LPCTSTR psz_CLSID = TStrFromGUID(CLSID_VLCPlugin);\r
 \r
     if( NULL == psz_CLSID )\r
@@ -181,7 +186,7 @@ STDAPI DllRegisterServer(VOID)
         // InprocServer32 key value\r
         hSubKey = keyCreate(hClassKey, TEXT("InprocServer32"));\r
         RegSetValueEx(hSubKey, NULL, 0, REG_SZ,\r
-                (const BYTE*)COMDLLPATH, sizeof(COMDLLPATH));\r
+                (const BYTE*)DllPath, DllPathLen);\r
         RegSetValueEx(hSubKey, TEXT("ThreadingModel"), 0, REG_SZ,\r
                 (const BYTE*)THREADING_MODEL, sizeof(THREADING_MODEL));\r
         RegCloseKey(hSubKey);\r
@@ -291,8 +296,22 @@ STDAPI DllRegisterServer(VOID)
 \r
     // register type lib into the registry\r
     ITypeLib *typeLib;\r
-    if( SUCCEEDED(LoadTypeLibEx(OLESTR("")COMDLLPATH, REGKIND_REGISTER, &typeLib)) )\r
+#ifndef OLE2ANSI\r
+    size_t typeLibPathLen = MultiByteToWideChar(CP_ACP, 0, DllPath, DllPathLen, NULL, 0);\r
+    if( typeLibPathLen > 0 )\r
+    {\r
+        LPOLESTR typeLibPath = (LPOLESTR)CoTaskMemAlloc(typeLibPathLen*sizeof(wchar_t));\r
+        MultiByteToWideChar(CP_ACP, 0, DllPath, DllPathLen, typeLibPath, typeLibPathLen);\r
+        if( SUCCEEDED(LoadTypeLibEx(typeLibPath, REGKIND_REGISTER, &typeLib)) )\r
+            typeLib->Release();\r
+        CoTaskMemFree((void *)typeLibPath);\r
+    }\r
+#else\r
+    if( SUCCEEDED(LoadTypeLibEx((LPOLESTR)DllPath, REGKIND_REGISTER, &typeLib)) )\r
         typeLib->Release();\r
+#endif\r
+\r
+    CoTaskMemFree((void *)psz_CLSID);\r
 \r
     return S_OK;\r
 };\r
@@ -302,7 +321,7 @@ STDAPI DllRegisterServer(VOID)
 /*\r
 ** easier to debug an application than a DLL on cygwin GDB :)\r
 */\r
-#include <stream.h>\r
+#include <iostream>\r
 \r
 STDAPI_(int) WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)\r
 {\r
index 8dbe9adc24a0362b026c90b41b87febcaadc1140..ab6327f7f9d5660c829c891370a07f004ce04eae 100644 (file)
@@ -202,9 +202,9 @@ SectionEnd
 \r
 Section /o "ActiveX plugin" SEC04\r
   SectionIn 2 3\r
-  SetOutPath $SYSDIR\r
+  SetOutPath "$INSTDIR"\r
   File activex\axvlc.dll\r
-  RegDLL $SYSDIR\axvlc.dll\r
+  RegDLL "$INSTDIR\axvlc.dll"\r
 SectionEnd\r
 \r
 SubSection "File type associations" SEC05\r
@@ -335,8 +335,8 @@ Section Uninstall
   !insertmacro UnRegisterExtensionSection ".wma"\r
   !insertmacro UnRegisterExtensionSection ".wmv"\r
 \r
-  UnRegDLL $SYSDIR\axvlc.dll\r
-  Delete /REBOOTOK $SYSDIR\axvlc.dll\r
+  UnRegDLL "$INSTDIR\axvlc.dll"\r
+  Delete /REBOOTOK "$INSTDIR\axvlc.dll"\r
 \r
   RMDir "$SMPROGRAMS\VideoLAN"\r
   RMDir /r $SMPROGRAMS\VideoLAN\r