| 32 | ExtenWindow* This = nullptr; |
| 33 | |
| 34 | bool Load(QString extenName) |
| 35 | { |
| 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")) |
| 41 | { |
| 42 | if (HMODULE module = LoadLibraryW(S(extenName + ".xdll").c_str())) |
| 43 | { |
| 44 | if (auto callback = (decltype(Extension::callback))GetProcAddress(module, "OnNewSentence")) |
| 45 | { |
| 46 | std::scoped_lock lock(extenMutex); |
| 47 | extensions.push_back({ S(extenName), callback }); |
| 48 | return true; |
| 49 | } |
| 50 | FreeLibrary(module); |
| 51 | } |
| 52 | } |
| 53 | return false; |
| 54 | } |
| 55 | |
| 56 | void Unload(int index) |
| 57 | { |
no test coverage detected