DLL ansprechen?
Übersicht

![]() |
Jan_Ehemaliger AdminBetreff: DLL ansprechen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hatte erwartet, das das functioniert:
Code: [AUSKLAPPEN] Extern "alleg40.dll" Function allegro_init() Function install_keyboard() Function set_gfx_mode(card%, w%,h%, v_w%,v_h%) Function allegro_message(msg$) Function release_screen() End Extern If (allegro_init() <> 0) Then RuntimeError "Kann Allegro nicht initialisieren" EndIf install_keyboard(); If set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) <> 0) Then If set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) <> 0) then set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); allegro_message("Unable to set any graphic mode\n%s\n"); RuntimeError "Kann keinen Grafikmodus setzten" endif endif release_screen(); End Aber es Zeigt mir nur den Stinkefinger :-/ Die Dll ist richtiggeschrieben und im gleichen verzeichniss. Fehlermeldung: Unrecognized calling convention 'alleg40.dll' |
||
between angels and insects |
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Willst du etwa Allegro einbinden? | ||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jap, als test will ich es mal versuchen. | ||
between angels and insects |
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lasse mal ".dll" weg ... | ||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
geht auch nciht. | ||
between angels and insects |
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
dann gucke Dir mal den Quelltext unter pub.mod\win32.mod an ... | ||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, habe ich, ich will aber die DLL nicht in den System Pfad setzten :-/
Und dort scheint es ja so zu sein. |
||
between angels and insects |
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist wirklich eigenartig, aber folgender Code funktioniert:
Code: [AUSKLAPPEN] Import "meine_schöne_DLL.dll" Extern Function Methode01(parameter) Function Methode02(parameter) End Extern |
||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
Demon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Frage ist, welche Konvention die Funktionen in der dll verwenden (also cdecl, stdcall, safecall, register...).
Dlls in Delphi verwenden standardmäßig stdcall (und in C natürlich cdecl). |
||
Don't drink and derive! |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Extern "alleg40.dll"
Sollte das nicht Code: [AUSKLAPPEN] Function allegro_init() Function install_keyboard() Function set_gfx_mode(card%, w%,h%, v_w%,v_h%) Function allegro_message(msg$) Function release_screen() End Extern Import "alleg40.dll" Extern Function allegro_init() Function install_keyboard() Function set_gfx_mode(card%, w%,h%, v_w%,v_h%) Function allegro_message(msg$) Function release_screen() End Extern |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Cdeamon
es ist eine C Dll |
||
between angels and insects |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Import "alleg40.dll"
Extern Function allegro_init()="xxx" Function install_keyboard()="xxx" Function set_gfx_mode(card%, w%,h%, v_w%,v_h%)="xxx" Function allegro_message(msg$)="xxx" Function release_screen()="xxx" End Extern xxx ist dabei der Name der Funktion wie er in der DLL ist ( kann man über PE explorer, depency viewer und andere programme rausfinden ), so wie ihr es aus Blitz3D userlibs mit :xxx kennt. ohne das XXX geht das nur mit direktem Sourcecode sowie dem was über die compiler direktiven ( extern "win32", extern "linux", extern "macos" ) bereits bekannt ist. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
klingt gut, muss ich heute mal testen. | ||
between angels and insects |
Nemesis |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also das müsste auch ohne das xxx gehen Dreamora, dieses zeugs ist ja nur dafür da um Functionen aus externen libs in blitz unter anderem namen als in der lib verfügbar zu machen. (also so eine art alias namen)
Function name_der_function_in_der_dll ( ...) sollte auch gehen. bei mir tut es das jedenfalls. |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, gibt es ncoh tools, zum DLL Prozeduren, herausfinden, PE ist ja kosten pflichtig und den anderen habe ich nciht gefunden. | ||
between angels and insects |
![]() |
VirtualDreams |
![]() Antworten mit Zitat ![]() |
---|---|---|
gib bei google ein: dependency walker
Das kommt von MS und ist kostenfrei. wurde aber oben schon erwähnt |
||
Zitat: "Ich habe ein Programm geschrieben und das funst nich. Warum nich ![]() ![]() |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm..also bei mir klappt es so net, es kommt die Meldung:
Unrecognized Import file type: user32.dll wenn ich versuche die user32.dll einzubinden, ob nun relativer oder absolute Pfadangabe. So schaut der Code aus: Import "user32.dll" Extern Function LoadCursor(filename$):"LoadCursorFromFileA" Function SetCursor(cursorhandle%):"SetCursor" End Extern Hat wer nen Tipp? |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, mit Suco habe ich gestern folgende Feststellung getroffen:
Wenn man z. B. mit einem MingW Compiler eine DLL erstellt - nennen wir sie mal "Test.dll", wird automatisch auch eine libTest.a angelegt. Diese muss dann in das Lib Verzeichnis von BMax. Ansprechen kann man das ganze so: Code: [AUSKLAPPEN] Import "-lTest"
Extern Function MyCoolFunction:Int(iX:Int, iY:Int) = "MyCoolFunction@8" End Extern Das = "MyCoolFunction@8" ist eigentlich nur dann erforderlich, wenn man mit Alias-Namen arbeiten will(z. B. mit dem Präfix "api" oder "api_"). @8 steht für die Anzahl an Bytes die auf dem Stack gepusht werden. Jeder Parameter ist 4 Byte groß(auch Byte Parameter z. B. oder Strings und Pointer). Das dyn. Ansteuern von DLLs via API-Funktionn LoadLibraryA, GetProcAddress und FreeLibrary ist nicht möglich. Das liegt daran, dass GetProcAddress einen Funktionspointer auf die enstprechende Funktion in der geladenen DLL zurückgibt. Man kann sich zwar in BMax die Adressen von Funktionen zurückgegeben lassen, aber keine Prototypen damit ansprechen wie es z. B. in C möglich ist. (Das überschreiben der Funktion durch eine andere geht auch nicht, das Windows natürlcih dazwischen funkt) Generell sieht ein Funktionsaufruf von BMax so aus: Code: [AUSKLAPPEN] push Parameter3 push Parameter2 push Parameter1 call _bb_Funktionsname Man müsste also rein theoretisch statts _bb_Funktionsname die Adresse von GetProcAddress einfügen. Da _bb_Funktionsname aber ein festes Label ist, und man keine Pointer aufrufen darf, geht das ganze nicht. mfg olli |
||
vertex.dreamfall.at | GitHub |
morszeck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HMMM... *nerv*
Probiere und probiere mehrere DLL's zum laufen zum bringen. Das ist ja echt beschiss... Da muss ich halt anders ran an dieser Sache. Danke für die Nachforschung bzw den TIP !!!! |
||
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also nochmal für die dummen:
Ich hab aus ein paar c# files, eine DLL erstellt. Was NUN? Ist es egal womit man dll's erstellt. In meine Falle ist es vom csharpcompiler v1.1* . Die Add.cs Code: [AUSKLAPPEN] using System; namespace MyMethods { public class AddClass { public static long Add(long zahl1, long zahl2) { return (zahl1+zahl2); } } } Die Multiply.cs Code: [AUSKLAPPEN] using System; namespace MyMethods { public class MultiplyClass { public static long Multiply(long zahl1, long zahl2) { return (zahl1*zahl2); } } } Und diese tu ich in ne DLL damit: csc /target:library /out:MyLibrary.DLL Add.cs Mult.cs hat auch alles gefunzt, die csharp exe die diese DLL benutzt, scheint auf die Methoden zugreifen zu können , aber wie sag ich das BlitzMax? |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group