Что нового

Dll Call и моя библиотека

AnyMak

Новичок
Сообщения
18
Репутация
3
Здравствуйте, вообщем читала на форуме, но все это мне не подходит...

На C++ есть моя функция

Код:
int _Annet_GetValue( int _Idx )
{
	int Result[5] = { 1, 2, 3, 4, 5 };

	if ( _Idx > 0 && _Idx < 5 )
	{
		return Result[ 1 ];
	} else {
		return -1;
	}
}


Вообщем я хочу что бы одна и та же функция по параметру возвращала специальные значения ( за место 1,2,3,4,5 будут другие нужные мне )

Пытаюсь вызвать функцию на Autoit:

Код:
func Annet_GetValue( $Idx )
   local $Result
   
   $Call = DllCall( "AnnetLib.dll", "int", "Annet_GetAddress", "int", $Idx )

   $Result = $Call[0]

   return $Result
EndFunc


Но при запуске скрипта -
И процесс всегда завершается с кодом 0xFFFFFFFFC0000005 ( 0xC0000005 )
Вроде как это нарушение прав доступа при чтении виртуального адреса

Прошу помощи, заранее Спасибо

Ах да, чуть не забыла, в экспорт пихаю вот так:

Код:
Annet_GetValue = _Annet_GetValue @1337
 

asdf8

Скриптер
Сообщения
564
Репутация
152
AnyMak [?]
На C++ есть моя функция
Вопрос скорее по срр, чем по AutoIt.
По моему, при объявлении функции нужно указывать, чтобы она поддерживала stdcall.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Проще же написать данную функцию на AutoIt чем таскать с собой Dll.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
AnyMak [?]
На C++ есть моя функция
А чем эта, например, хуже? :smile:
Код:
For $i = -2 To 6
	$iRes = _Annet_GetAddress($i);(String($i))
	ConsoleWrite(StringFormat('Index:\t%d\tError:\t%d\tResult:\t%d\n', $i, @error, $iRes))
Next

Func _Annet_GetAddress($i_Index)
	Local $a_Address[5] = [Random(1, 9, 1), Random(10, 99, 1), Random(100, 999, 1), Random(1000, 9999, 1), Random(10000, 99999, 1)]

	$i_Index = Int($i_Index)
	Switch $i_Index
		Case 0 To 4;UBound($a_Address) - 1
			Return $a_Address[$i_Index]
		Case Else
			Return SetError(1, 0, -1)
	EndSwitch
EndFunc   ;==>_Annet_GetAddress
 
Автор
A

AnyMak

Новичок
Сообщения
18
Репутация
3
Да, конечно легче! И вытащат на раз два. А дллку я запакую ( лицензионный VMProtect и Themida ).
Тем более в дллке все ресурсы и некоторые функции, для привязки.
 

darkwhite

Знающий
Сообщения
129
Репутация
5
Я конечно не знаток в dllcall самому тоже интересно данная тема. Есть тоже одна библиотека которую хочу вызвать и она тоже ругается, хотя если вызввать ее же из delphi то работает

а по теме почему в
Код:
$Call = DllCall( "AnnetLib.dll", "int", "Annet_GetAddress", "int", $Idx )

стоит имя вызываемой функции Annet_GetAddress,
хотя везде объявлена Annet_GetValue или я что то не так понял :whistle:
 
Верх