Étant donné que je dois écrire une petite bibliothèque dans Assembler qui accède à une base de données Sqlite3, j'ai lancé une recherche sur l'utilisation de sqlite3.dll. J'ai trouvé un moyen de le faire dans fasm (je dois utiliser masm32 pour de nombreuses raisons qui ne contribuent pas à résoudre le problème, c'est simplement une nécessité) via cinvoke
et en référençant la bibliothèque qui n'est pas disponible comme il semble.
Ce que je voudrais essentiellement savoir, c'est s'il est possible pour moi de faire une chose similaire en masm ou si je dois obtenir les adresses de toutes les fonctions que j'ai besoin d'appeler individuellement via GetProcAddress
.Comment utiliser sqlite3 avec masm32 sous Windows
Répondre
Pourquoi pas? Il est simple, aussi simple que:
.486
.model flat, stdcall
option casemap:none
include \masm32\include\masm32.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include sqlite3.inc
.data
szSQLDB db "MyDB.db3", 0
szRandQuery db "SELECT * FROM Quit ORDER BY RANDOM() LIMIT 1;", 0
.data?
hDBase dd ?
.code
START:
invoke sqlite3_open, offset szSQLDB, offset hDBase
call GetQuitMsg
invoke sqlite3_close, hDBase
invoke ExitProcess, 0
GetQuitMsg proc
local ppStmt
invoke sqlite3_prepare_v2, hDBase, offset szRandQuery, -1, addr ppStmt, 0
invoke sqlite3_step, ppStmt
invoke sqlite3_data_count, ppStmt
.if eax !=0
invoke sqlite3_column_text, ppStmt, 0
invoke MessageBoxA, 0, eax, 0,0
.endif
ret
GetQuitMsg endp
end START
J'utilise un makefile, et Geany comme éditeur. Le zip comprend le db de test, sqlite3.inc, mais pas le sqlite3.dll juste décompresser les fichiers, plop le sqlite3.dll dans le répertoire du projet et vous serez prêt à partir. Je n'utilise pas non plus le lien MS, à la place j'utilise GoLink car il n'a pas besoin de bibliothèques d'importation, mais si vous devez utiliser MS Link, j'ai une bibliothèque d'importation SQLite quelque part.
Salam,
Il est mon code exemple :)
.386
.model flat, stdcall
option casemap:none
include windows.inc
include advapi32.inc
include comctl32.inc
include kernel32.inc
include shell32.inc
include user32.inc
includelib advapi32.lib
includelib comctl32.lib
includelib kernel32.lib
includelib shell32.lib
includelib user32.lib
.const
SQLITE_ROW equ 100
.data?
dwResult dd ?
hDB dd ?
sqlite3_close dd ?
sqlite3_column_text dd ?
sqlite3_exec dd ?
sqlite3_open dd ?
sqlite3_prepare dd ?
sqlite3_step dd ?
.data
szSQLite3Lib db "sqlite3.dll", 0h
szfnSQLite3_close db "sqlite3_close", 0h
szfnSQLite3_column_text db "sqlite3_column_text", 0h
szfnSQLite3_exec db "sqlite3_exec", 0h
szfnSQLite3_open db "sqlite3_open", 0h
szfnSQLite3_prepare db "sqlite3_prepare", 0h
szfnSQLite3_step db "sqlite3_step", 0h
szDBFile db "file.db", 0h
szSQLStmt1 db "create table DBI (nID integer primary key, szName text)", 0h
szSQLStmt2 db "insert into DBI (nID, szName) values (1, 'RizonBarns')", 0h
szSQLStmt3 db "insert into DBI (szName) values ('Rizon & Barns')", 0h
szSQLStmt4 db "insert into DBI (szName) values ('MASM32')", 0h
szSQLStmt5 db "select * from DBI", 0h
.code
main:
push offset szSQLite3Lib
call LoadLibraryA
cmp eax, 0h
je @ERROR
push offset szfnSQLite3_close
push eax
call GetProcAddress
mov sqlite3_close, eax
push offset szSQLite3Lib
call LoadLibraryA
push offset szfnSQLite3_column_text
push eax
call GetProcAddress
mov sqlite3_column_text, eax
push offset szSQLite3Lib
call LoadLibraryA
push offset szfnSQLite3_exec
push eax
call GetProcAddress
mov sqlite3_exec, eax
push offset szSQLite3Lib
call LoadLibraryA
push offset szfnSQLite3_open
push eax
call GetProcAddress
mov sqlite3_open, eax
push offset szSQLite3Lib
call LoadLibraryA
push offset szfnSQLite3_prepare
push eax
call GetProcAddress
mov sqlite3_prepare, eax
push offset szSQLite3Lib
call LoadLibraryA
push offset szfnSQLite3_step
push eax
call GetProcAddress
mov sqlite3_step, eax
push 255
push GPTR
call GlobalAlloc
mov hDB, eax
lea edx, hDB
push edx
push offset szDBFile
call sqlite3_open
push 0h
push 0h
push 0h
push offset szSQLStmt1
push hDB
call sqlite3_exec
push 0h
push 0h
push 0h
push offset szSQLStmt2
push hDB
call sqlite3_exec
push 0h
push 0h
push 0h
push offset szSQLStmt3
push hDB
call sqlite3_exec
push 0h
push 0h
push 0h
push offset szSQLStmt4
push hDB
call sqlite3_exec
push 0h
lea eax, dwResult
push eax
push offset szSQLStmt5
call lstrlenA
push eax
push offset szSQLStmt5
push hDB
call sqlite3_prepare
@@:
push dwResult
call sqlite3_step
cmp eax, SQLITE_ROW
jne @F
push 0h
push dwResult
call sqlite3_column_text
mov esi, eax
push 1h
push dwResult
call sqlite3_column_text
mov edi, eax
push 0h
push esi
push edi
push 0h
call MessageBoxA
jmp @B
@@:
push hDB
call sqlite3_close
@ERROR:
xor eax, eax
push eax
call ExitProcess
end main
Il va créer le fichier de base de données avec le nom 'file.db', créez table nommée 'DBI' et insert données autant de trois lignes. Après avoir inséré des données trois fois, il affichera les données avec MessageBoxA. nID en tant que légende et szName en tant que texte.
Amusez-vous avec mon code :),
S'il vous plaît ajouter INCLUDE, LIB et environnement BIN au chemin d'installation MASM.
Exemple:
Include = C: \ MASM32 \ include
LIB = C: \ MASM32 \ lib
BIN = C: \ MASM32 \ bin
Et assurez-vous qu'il sont les chemins ci-dessus lorsque vous tapez définir à l'invite de commande.
Wassalam.
- 1. assemblage x86 - comment utiliser l'API Windows _WriteConsole @ 4 - syntaxe masm32
- 2. Utiliser SQLite avec C sous Windows
- 3. A2004 Problème avec MASM32
- 4. Utiliser des noms symboliques sans paquet masm32
- 5. GHC :: Liens secondaires sqlite3 échoue sous Windows
- 6. Comment utiliser Tor avec cURL (sous Windows)?
- 7. Comment utiliser gtk avec cmake sous Windows?
- 8. MASM32 loop
- 9. comment utiliser lapack sous windows
- 10. Problème avec SQLite3 sous VC9
- 11. Comment installer sqlite3 sur Windows
- 12. Comment utiliser l'instruction Sqlite3 COMME
- 13. Comment utiliser sqlite3 dans XCode
- 14. Qt SDK sous Windows: comment utiliser Assistant
- 15. Problème avec sqlite3 ruby 2.0 sur Windows
- 16. Comment utiliser correctement JNI avec Java EE (Servlets) sous Windows?
- 17. Comment utiliser SquishIt sous Windows Azure
- 18. Comment utiliser GtkSocket sous Windows OS?
- 19. Comment configurer FTS3/FTS4 avec python2.7 sous Windows
- 20. Outil Windows GUI pour sqlite3?
- 21. Comment puis-je utiliser SQLite avec DJANGO sur WIndows 7
- 22. Division modulaire MASM32
- 23. winapi avec numéro 64bit en masm32
- 24. Comment utiliser Pageant avec Paramiko sur Windows?
- 25. Sqlite3, c-api, installation sur windows
- 26. comment modifier le paramètre de l'éditeur de liens dans MASM32
- 27. masm32: manipulation de tableau simple
- 28. Comment utiliser NLog sous Linux avec mono?
- 29. comment connecter le compilateur masm32 à notepad ++
- 30. Puis-je utiliser la glibc sous windows?