Для тех, кто хочет сделать мир лучше.
-
eldest
- Разработчик

- Сообщения: 302
- Зарегистрирован: 17.03.2008
- Откуда: такие как я?
- Поблагодарили: 2 раза
-
Контактная информация:
#16
Сообщение
07.07.2010, 02:05
Dr_Quake писал(а):Вы вообще про что? Какая на фиг библиотека, можно тупо сделать импорт и не извращаться даже с динамической загрузкой.
Думаю нужные импорты можно взять у Андрея.
и не извращаться даже с динамической загрузкой
Я извращен.
-
andreil
- Разработчик

- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
-
Контактная информация:
#17
Сообщение
07.07.2010, 09:38
eldest писал(а):Darth Revan
Вот так наверное
Код: Выделить всё
type
SteamIsLoggedIn_t = function(pbIsLoggedIn: Integer; pError: TSteamError): int; virtual; cdecl;
const
SteamIsLoggedIn: SteamIsLoggedIn_t = nil;
var
steamDLL: THandle;
steamDLL := LoadLibrary('steam.dll');
try
@SteamIsLoggedIn := GetProcAddress(steamDLL, 'SteamIsLoggedIn');
SteamIsLoggedIn(<pbIsLoggedIn>, <pError>);
finally
FreeLibrary(steamDLL);
end;
Не так, а вот так:
Код: Выделить всё
function SteamIsLoggedIn(pbIsLoggedIn: pInteger; pError: pSteamError): Integer; cdecl; external "Steam.dll";
Ты забыл про указатели ;)
В аттаче - часть исходников, там есть почти все функции Steam.dll (только там они направлены на экспорт, переделать по подобию описанной выше - добавить "external "Steam.dll";").
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
-
Darth Revan
- Майор

- Сообщения: 784
- Зарегистрирован: 30.09.2008
- Поблагодарили: 1 раз
-
Контактная информация:
#18
Сообщение
07.07.2010, 12:40
Код: Выделить всё
function SteamIsLoggedIn(pbIsLoggedIn: pInteger; pError: pSteamError): Integer;
cdecl; external 'Steam.dll';
function MySteamIsLoggedIn: Integer;
var
steamDLL: THandle;
pbIsLoggedIn: pInteger;
begin
steamDLL := LoadLibrary('Steam.dll');
try
@SteamIsLoggedIn := GetProcAddress(steamDLL, 'SteamIsLoggedIn');
SteamIsLoggedIn(pbIsLoggedIn, pError);
except
Result := -1;
end;
FreeLibrary(steamDLL);
Result := pbIsLoggedIn;
end;
Переделал вот так, но pSteamError и TSteamError не существует.
-
Dr_Quake
- Майор

- Сообщения: 654
- Зарегистрирован: 10.03.2008
- Поблагодарили: 6 раз
-
Контактная информация:
#19
Сообщение
07.07.2010, 13:05
Да вы совсем долбанулись ради boolean результата?! Это в 2 действия делается для этой одной функции.
asm
push @someint
push @someint2
call dword ptr [SteamIsLoggedIn]
mov eax,someintresult
end;
А далее по обстановке. Ну и в синтаксисе не уверен, это ж делфи.
-
Darth Revan
- Майор

- Сообщения: 784
- Зарегистрирован: 30.09.2008
- Поблагодарили: 1 раз
-
Контактная информация:
#20
Сообщение
07.07.2010, 14:33
Dr_Quake
И что с этим дальше делать?
-
eldest
- Разработчик

- Сообщения: 302
- Зарегистрирован: 17.03.2008
- Откуда: такие как я?
- Поблагодарили: 2 раза
-
Контактная информация:
#21
Сообщение
07.07.2010, 14:44
Dr_Quake
Ну тогда надо звать x_000, может он его асму научит.
-
Fire666
- Эксперты no-Steam

- Сообщения: 2600
- Зарегистрирован: 15.02.2007
- Откуда: Москва
- Благодарил (а): 2 раза
- Поблагодарили: 44 раза
-
Контактная информация:
#22
Сообщение
07.07.2010, 15:11
Код: Выделить всё
TSteamError pError;
bool pbIsLoggedIn;
SteamIsLoggedIn( pbIsLoggedIn, pError );
int CSteamFunc::SteamIsLoggedIn( bool &pbIsLoggedIn, TSteamError &pError )
{
FARPROC FuncAdr = GetProcAddress(SteamDLL, "SteamIsLoggedIn");
int funcexec = ((bool (__cdecl *)( bool &, TSteamError & ))FuncAdr)( pbIsLoggedIn, pError );
return funcexec;
}
-
Darth Revan
- Майор

- Сообщения: 784
- Зарегистрирован: 30.09.2008
- Поблагодарили: 1 раз
-
Контактная информация:
#23
Сообщение
07.07.2010, 20:14
eldest
Асм идёт у меня после С++ в списке.
fire64
Но при этом С++ я понимаю слабо (особенно, это касается типов и функций экспортируемых или импортируемых).
Добавлено спустя 42 минуты 50 секунд:
andreil
C PSteamError разобрался (вынул из Steam_Account.pas), но ни мой вариант, ни eldest'а не работают.
-
Dr_Quake
- Майор

- Сообщения: 654
- Зарегистрирован: 10.03.2008
- Поблагодарили: 6 раз
-
Контактная информация:
#24
Сообщение
07.07.2010, 22:41
Работать с ним. Это вообще оформление было для delphi.
-
Darth Revan
- Майор

- Сообщения: 784
- Зарегистрирован: 30.09.2008
- Поблагодарили: 1 раз
-
Контактная информация:
#25
Сообщение
07.07.2010, 22:44
Dr_Quake
Обрамление в asm и end; ещё не делает код basm-совместимым.
-
Dr_Quake
- Майор

- Сообщения: 654
- Зарегистрирован: 10.03.2008
- Поблагодарили: 6 раз
-
Контактная информация:
#26
Сообщение
07.07.2010, 23:07
Delphi хватит вполне...
-
x_000
- Полковник

- Сообщения: 4889
- Зарегистрирован: 25.02.2008
- Откуда: Deutsches Reich
- Благодарил (а): 6 раз
- Поблагодарили: 18 раз
#27
Сообщение
08.07.2010, 03:22
вы тут вообще о чем
пока я вижу тут только какой-то жуткий-жуткий файровский код
и, насколько я помню, в стим.длл функции совсем не cdecl, а stdcall
-
andreil
- Разработчик

- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
-
Контактная информация:
#28
Сообщение
09.07.2010, 01:56
x_000 писал(а):вы тут вообще о чем
пока я вижу тут только какой-то жуткий-жуткий файровский код
и, насколько я помню, в стим.длл функции совсем не cdecl, а stdcall
Как раз cdecl ;)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
-
x_000
- Полковник

- Сообщения: 4889
- Зарегистрирован: 25.02.2008
- Откуда: Deutsches Reich
- Благодарил (а): 6 раз
- Поблагодарили: 18 раз
#29
Сообщение
09.07.2010, 02:17
нда? а стек вроде вызываемая функция подчищает, или нет? может я это в стимклиент видел? приду домой, посмотрю точно
забыл уже, что и как в либах стима вызывается :(
Добавлено спустя 2 минуты 41 секунду:
а, я все-таки не прав. там действительно цдекл %)
-
eldest
- Разработчик

- Сообщения: 302
- Зарегистрирован: 17.03.2008
- Откуда: такие как я?
- Поблагодарили: 2 раза
-
Контактная информация:
#30
Сообщение
09.07.2010, 19:30
Код: Выделить всё
STEAM_API int STEAM_CALL SteamIsLoggedIn (int *pbIsLoggedIn, TSteamError *pError);
int MySteamIsLoggedIn(void) {
int pbIsLoggedIn = 0;
TSteamError pError; // = new TSteamError;
return (SteamIsLoggedIn(&pbIsLoggedIn, pError) ? pbIsLoggedIn : -1);
}
int IsLoggedIn = MySteamIsLoggedIn(); // 1 - logged in, 0 - not logged in, -1 - Error