@@ -33,10 +33,13 @@ namespace
3333
3434 bool Load (QString extenName)
3535 {
36- // Extension is dll and exports "OnNewSentence"
37- if (QTextFile (extenName + " .dll" , QIODevice::ReadOnly).readAll ().contains (" OnNewSentence" ))
36+ if (extenName.endsWith (" .dll" )) extenName.chop (4 );
37+ if (extenName.endsWith (" .xdll" )) extenName.chop (5 );
38+ if (!QFile::exists (extenName + " .xdll" )) QFile::copy (extenName + " .dll" , extenName + " .xdll" );
39+ // Extension must export "OnNewSentence"
40+ if (QTextFile (extenName + " .xdll" , QIODevice::ReadOnly).readAll ().contains (" OnNewSentence" ))
3841 {
39- if (HMODULE module = LoadLibraryW (S (extenName + " .dll " ).c_str ()))
42+ if (HMODULE module = LoadLibraryW (S (extenName + " .xdll " ).c_str ()))
4043 {
4144 if (auto callback = (decltype (Extension::callback))GetProcAddress (module , " OnNewSentence" ))
4245 {
@@ -53,7 +56,7 @@ namespace
5356 void Unload (int index)
5457 {
5558 std::scoped_lock writeLock (extenMutex);
56- FreeLibrary (GetModuleHandleW ((extensions.at (index).name + L" .dll " ).c_str ()));
59+ FreeLibrary (GetModuleHandleW ((extensions.at (index).name + L" .xdll " ).c_str ()));
5760 extensions.erase (extensions.begin () + index);
5861 }
5962
@@ -80,14 +83,14 @@ namespace
8083
8184 void Add (QFileInfo extenFile)
8285 {
83- if (extenFile.suffix () == " dll" )
86+ if (extenFile.suffix () == " dll" || extenFile. suffix () == " xdll " )
8487 {
8588 if (extenFile.absolutePath () != QDir::currentPath ())
8689 {
8790 if (QFile::exists (extenFile.fileName ()) && QMessageBox::question (This, EXTENSIONS, CONFIRM_EXTENSION_OVERWRITE) == QMessageBox::Yes) QFile::remove (extenFile.fileName ());
8891 if (!QFile::copy (extenFile.absoluteFilePath (), extenFile.fileName ())) QMessageBox::warning (This, EXTENSIONS, EXTENSION_WRITE_ERROR);
8992 }
90- if (Load (extenFile.completeBaseName ())) return Sync ();
93+ if (Load (extenFile.fileName ())) return Sync ();
9194 }
9295 QMessageBox::information (This, EXTENSIONS, QString (INVALID_EXTENSION).arg (extenFile.fileName ()));
9396 }
@@ -96,7 +99,7 @@ namespace
9699 {
97100 QAction addExtension (ADD_EXTENSION);
98101 if (QMenu::exec ({ &addExtension }, ui.extenList ->mapToGlobal (point), nullptr , This))
99- if (QString extenFile = QFileDialog::getOpenFileName (This, ADD_EXTENSION, " ." , EXTENSIONS + QString (" (*.dll)" )); !extenFile.isEmpty ()) Add (extenFile);
102+ if (QString extenFile = QFileDialog::getOpenFileName (This, ADD_EXTENSION, " ." , EXTENSIONS + QString (" (*.xdll) \n Libraries (*. dll)" )); !extenFile.isEmpty ()) Add (extenFile);
100103 }
101104}
102105
@@ -115,7 +118,7 @@ bool DispatchSentenceToExtensions(std::wstring& sentence, const InfoForExtension
115118void CleanupExtensions ()
116119{
117120 std::scoped_lock writeLock (extenMutex);
118- for (auto extension : extensions) FreeLibrary (GetModuleHandleW ((extension.name + L" .dll " ).c_str ()));
121+ for (auto extension : extensions) FreeLibrary (GetModuleHandleW ((extension.name + L" .xdll " ).c_str ()));
119122 extensions.clear ();
120123}
121124
0 commit comments