Aus eine Adresse die von der DLL kommt einen String auslesen
Übersicht

funkheldBetreff: Aus eine Adresse die von der DLL kommt einen String auslesen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, guten Tag.
Eine dll mit BlitzMax aufrufen. Die dll wurden in Purebasic erstellt. Diese funktioniert ohne Fehlermeldung , aber es wird nur ein Adresse??? zurückgegeben von BlitzMax. Wie kann ich bitte aus der Adresse??? den Text rauslesen ? Danke. GRuss Code: [AUSKLAPPEN] ProcedureDLL.s MyFunction() ReturnString$ = "text kommt aus der dll" ProcedureReturn ReturnString$ EndProcedure Dazu das BlitzMaxprogramm: Code: [AUSKLAPPEN] Strict import brl.basic Import pub.win32 Import brl.timer Local DllName:String, DllHandle:Int global text_int:int global text:string global text1:string DllName = "d:/blitzmax/daten/dll_test2.dll" DllHandle = LoadLibraryA(DllName) Global timer:TTimer = CreateTimer(60) Graphics 400,400 Global MyFunction()"Win32" = GetProcAddress(DllHandle,"MyFunction") ' Text ausgeben If DllHandle = 0 drawtext "Dll konnte nicht geladen werden",10,10 End EndIf text_int=MyFunction() ' text=MyFunction() drawtext text_int,10,10 ' drawtext text,10,10 While Not AppTerminate() WaitTimer(timer) Flip 0 Wend |
||
- Zuletzt bearbeitet von funkheld am Di, Aug 16, 2016 23:01, insgesamt 3-mal bearbeitet
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Solange Byte-weise einlesen bis eine 0 kommt. | ||
Farbfinsternis.tv |
funkheld |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie kann man jetzt in BlitzMax mit Peek diese Adresse Byte für Byte auslesen ?
Danke. Gruss |
||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
konnte man nich iwi so auf dll zugreifen?
(ich weiß zwar nich wozu man sich eine dll in max macht weil max kann theorie alles ^^ ... man braucht keine dll von pbasic, vorallem könnte ich mir denken das man sie dann nich auslesen kann.) Code: [AUSKLAPPEN] ?Win32
Extern "os" Function win32_LoadLibrary:Int(lpFileName$z) = "LoadLibraryA@4" Function win32_GetProcAddress:Byte Ptr(hModule:Int, lpProcName$z) = "GetProcAddress@8" End Extern ? Function SetAlwaysOnTop(win:TGadget, bState:Int = True) ?Win32 Local hModule:Int = win32_LoadLibrary("user32.dll") If hModule = 0 Then Return EndIf Local SetWindowPos:Int(hWnd:Int, hWndInsertAfter:Int, X:Int, Y:Int, cx:Int, cy:Int, uFlags:Int) "os" = win32_GetProcAddress(hModule, "SetWindowPos") Local hwnd% = QueryGadget(win, QUERY_HWND) If hwnd <> 0 Then If bState SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE) Else SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE) EndIf EndIf ? End Function |
||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
funkheld |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Komisch bei der Freebasic-Dll funktioniert es.
Der Wert 123 wird ausgegeben. FreeBasic-DLL Code: [AUSKLAPPEN] DECLARE FUNCTION AddNumbers ALIAS "AddNumbers" ( _ BYVAL operand1 AS INTEGER, BYVAL operand2 AS INTEGER ) _ AS INTEGER FUNCTION AddNumbers (BYVAL operand1 AS INTEGER, BYVAL operand2 AS INTEGER ) _ AS INTEGER EXPORT AddNumbers = operand1 + operand2 END FUNCTION Blitzmaxprogramm: Code: [AUSKLAPPEN] Strict import brl.basic Import pub.win32 Import brl.timer Local DllName:String, DllHandle:Int global z:int,z1:int,z2:int DllName = "d:/blitzmax/daten/fb_dll.dll" DllHandle = LoadLibraryA(DllName) Global timer:TTimer = CreateTimer(60) Graphics 400,400 Global AddNumbers(q:int,a:int)"Win32" = GetProcAddress(DllHandle,"AddNumbers@8") ' Zahl ausgeben If DllHandle = 0 drawtext "Dll konnte nicht geladen werden",10,10 End EndIf z=100 z1=23 z2=AddNumbers(z,z1) drawtext z2,20,20 While Not AppTerminate() WaitTimer(timer) Flip 0 Wend |
||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
die frage is die wie pbasic die dll compiliert | ||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn man Strings zurückgeben will muss man auch Strings im Funktionskopf als Rückgabewert deklarieren.
Wäre mein erster Ansatz. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
funkheld |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Diese beiden Möglichkeiten gibt es bei Purebasic : ProcedureDLL oder ProcedureCDLL
Beide verhalten sich aber gleich und geben den String nicht aus sondern nur einen Zahlenwert,ob es eine Adresse ist weiß ich nicht. Gruss |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Global MyFunction()"Win32" = GetProcAddress(DllHandle,"MyFunction") ' Text ausgeben
Hier definierst Du die Funktion so dass sie einen Integer zurückgibt, da kein Rückgabetyp definiert wird. Mit: Code: [AUSKLAPPEN] Global MyFunction:string()"Win32" = GetProcAddress(DllHandle,"MyFunction") ' Text ausgeben
erklärst Du dass die Funktion einen String zurückgeben soll. Mangels DLL nicht getestet, aber wäre einen Versuch wert. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
funkheld |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Info.
Funktinoniert nicht. Kommt ein Fehlermeldung im Speicher... Es war mal ein Versuch, ist aber nicht Lebenswichtig diese DLL . Gruss |
||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
nur als grenz info ich würde nie ein programm nutzen was einer privat geschrieben hat und dessen eine dll zufügt!
1. ist es nicht notwendig du kannst alles wirklich alles mit bmax machen 2. man weiß ja nicht was die dll macht 3. compiliert pbasic die dll's sehr komisch |
||
Skype: Anarchie1984
http://projektworks.de/maxbase/ Icq - Erneuert am 21.08.2017 Yahoo - Erneuert am 21.08.2017 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group