Skip to content

Commit

Permalink
Исправлена прокси-библиотека NativeApi для 32-битной архитектуры
Browse files Browse the repository at this point in the history
  • Loading branch information
EvilBeaver committed Mar 1, 2025
1 parent 6c6fd14 commit ea3a6e8
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 6 deletions.
5 changes: 4 additions & 1 deletion src/OneScript.StandardLibrary/NativeApi/NativeApiKernel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ public static IntPtr LoadLibrary(string filename)

public static IntPtr GetProcAddress(IntPtr module, string procName)
{
return IsLinux ? LinuxProc(module, procName) : WindowsProc(module, procName);
var pointer = IsLinux ? LinuxProc(module, procName) : WindowsProc(module, procName);
return pointer != IntPtr.Zero
? pointer
: throw new ApplicationException($"Function pointer for {procName} not obtained.");
}

public static bool FreeLibrary(IntPtr module)
Expand Down
4 changes: 4 additions & 0 deletions src/OneScript.StandardLibrary/NativeApi/NativeApiLibrary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ public NativeApiLibrary(string filepath, string identifier, ITypeManager typeMan
_tempfile = Path.GetTempFileName();
NativeApiPackage.Extract(stream, _tempfile);
Module = NativeApiKernel.LoadLibrary(_tempfile);
if (Module == IntPtr.Zero)
{
File.Delete(_tempfile);
}
}
else
Module = NativeApiKernel.LoadLibrary(filepath);
Expand Down
8 changes: 4 additions & 4 deletions src/ScriptEngine.NativeApi/NativeApiProxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ DllExport int32_t GetNParams(ProxyComponent* proxy, int32_t lMethodNum)
return (int32_t)proxy->Component().GetNParams(lMethodNum);
}

DllExport bool ADDIN_API HasParamDefValue(ProxyComponent* proxy, int32_t lMethodNum, int32_t lParamNum)
DllExport bool HasParamDefValue(ProxyComponent* proxy, int32_t lMethodNum, int32_t lParamNum)
{
CHECK_PROXY(false);
tVariant variant = { 0 };
Expand All @@ -335,7 +335,7 @@ DllExport bool ADDIN_API HasParamDefValue(ProxyComponent* proxy, int32_t lMethod
return result;
}

DllExport bool ADDIN_API GetParamDefValue(ProxyComponent* proxy, int32_t lMethodNum, int32_t lParamNum, VariantFuncRespond respond)
DllExport bool GetParamDefValue(ProxyComponent* proxy, int32_t lMethodNum, int32_t lParamNum, VariantFuncRespond respond)
{
CHECK_PROXY(false);
tVariant variant = { 0 };
Expand All @@ -351,15 +351,15 @@ DllExport bool HasRetVal(ProxyComponent* proxy, int32_t lMethodNum)
return proxy->Component().HasRetVal(lMethodNum);
}

DllExport bool ADDIN_API CallAsProc(ProxyComponent* proxy, int32_t lMethodNum, tVariant* paParams)
DllExport bool CallAsProc(ProxyComponent* proxy, int32_t lMethodNum, tVariant* paParams)
{
CHECK_PROXY(false);
auto lSizeArray = GetNParams(proxy, lMethodNum);
bool ok = proxy->Component().CallAsProc(lMethodNum, paParams, lSizeArray);
return ok;
}

DllExport bool ADDIN_API CallAsFunc(ProxyComponent* proxy, int32_t lMethodNum, tVariant* paParams, VariantFuncRespond respond)
DllExport bool CallAsFunc(ProxyComponent* proxy, int32_t lMethodNum, tVariant* paParams, VariantFuncRespond respond)
{
CHECK_PROXY(false);
tVariant variant = { 0 };
Expand Down
3 changes: 2 additions & 1 deletion tests/native-api.os
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

ВсеТесты = Новый Массив;

// TODO: сделать прогон этого теста еще и на 32-битной архитектуре, см. ошибку #1531
ВсеТесты.Добавить("ТестДолжен_ПроверитьПодключениеВнешнейКомпонентыZIP");
ВсеТесты.Добавить("ТестДолжен_ПроверитьПодключениеВнешнейКомпонентыDLL");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСвойстваВнешнейКомпоненты");
Expand Down Expand Up @@ -125,7 +126,7 @@

юТест.ПроверитьРавенство(Строка(ТипЗнч(ВнешняяКомпонента)), Строка(Тип(ИмяВнешнейКомпоненты)));

КонецПроцедуры
КонецПроцедуры

Процедура ТестДолжен_ПроверитьПодключениеВнешнейКомпонентыDLL() Экспорт

Expand Down

0 comments on commit ea3a6e8

Please sign in to comment.