Skip to content

Commit eb73a79

Browse files
committed
Исправлена прокси-библиотека NativeApi для 32-битной архитектуры
(cherry picked from commit ea3a6e8)
1 parent f1f9636 commit eb73a79

File tree

4 files changed

+14
-6
lines changed

4 files changed

+14
-6
lines changed

src/ScriptEngine.HostedScript/Library/NativeApi/NativeApiKernel.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ public static IntPtr LoadLibrary(string filename)
3030

3131
public static IntPtr GetProcAddress(IntPtr module, string procName)
3232
{
33-
return IsLinux ? LinuxProc(module, procName) : WindowsProc(module, procName);
33+
var pointer = IsLinux ? LinuxProc(module, procName) : WindowsProc(module, procName);
34+
return pointer != IntPtr.Zero
35+
? pointer
36+
: throw new ApplicationException($"Function pointer for {procName} not obtained.");
3437
}
3538

3639
public static bool FreeLibrary(IntPtr module)

src/ScriptEngine.HostedScript/Library/NativeApi/NativeApiLibrary.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ public NativeApiLibrary(String filepath, String identifier)
3737
_tempfile = Path.GetTempFileName();
3838
NativeApiPackage.Extract(stream, _tempfile);
3939
Module = NativeApiKernel.LoadLibrary(_tempfile);
40+
if (Module == IntPtr.Zero)
41+
{
42+
File.Delete(_tempfile);
43+
}
4044
}
4145
else
4246
Module = NativeApiKernel.LoadLibrary(filepath);

src/ScriptEngine.NativeApi/NativeApiProxy.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ DllExport int32_t GetNParams(ProxyComponent* proxy, int32_t lMethodNum)
326326
return (int32_t)proxy->Component().GetNParams(lMethodNum);
327327
}
328328

329-
DllExport bool ADDIN_API HasParamDefValue(ProxyComponent* proxy, int32_t lMethodNum, int32_t lParamNum)
329+
DllExport bool HasParamDefValue(ProxyComponent* proxy, int32_t lMethodNum, int32_t lParamNum)
330330
{
331331
CHECK_PROXY(false);
332332
tVariant variant = { 0 };
@@ -335,7 +335,7 @@ DllExport bool ADDIN_API HasParamDefValue(ProxyComponent* proxy, int32_t lMethod
335335
return result;
336336
}
337337

338-
DllExport bool ADDIN_API GetParamDefValue(ProxyComponent* proxy, int32_t lMethodNum, int32_t lParamNum, VariantFuncRespond respond)
338+
DllExport bool GetParamDefValue(ProxyComponent* proxy, int32_t lMethodNum, int32_t lParamNum, VariantFuncRespond respond)
339339
{
340340
CHECK_PROXY(false);
341341
tVariant variant = { 0 };
@@ -351,15 +351,15 @@ DllExport bool HasRetVal(ProxyComponent* proxy, int32_t lMethodNum)
351351
return proxy->Component().HasRetVal(lMethodNum);
352352
}
353353

354-
DllExport bool ADDIN_API CallAsProc(ProxyComponent* proxy, int32_t lMethodNum, tVariant* paParams)
354+
DllExport bool CallAsProc(ProxyComponent* proxy, int32_t lMethodNum, tVariant* paParams)
355355
{
356356
CHECK_PROXY(false);
357357
auto lSizeArray = GetNParams(proxy, lMethodNum);
358358
bool ok = proxy->Component().CallAsProc(lMethodNum, paParams, lSizeArray);
359359
return ok;
360360
}
361361

362-
DllExport bool ADDIN_API CallAsFunc(ProxyComponent* proxy, int32_t lMethodNum, tVariant* paParams, VariantFuncRespond respond)
362+
DllExport bool CallAsFunc(ProxyComponent* proxy, int32_t lMethodNum, tVariant* paParams, VariantFuncRespond respond)
363363
{
364364
CHECK_PROXY(false);
365365
tVariant variant = { 0 };

tests/native-api.os

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

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

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

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

68-
КонецПроцедуры
69+
КонецПроцедуры
6970

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

0 commit comments

Comments
 (0)