Pointer auf Type an Funktion übergeben [Error-Code 1813]
Übersicht

![]() |
Der EisvogelBetreff: Pointer auf Type an Funktion übergeben [Error-Code 1813] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Ich habe folgendes Probelm: Ich möchte einen Pointer auf ein Type-Feld an eine Funktion übergeben: Code: [AUSKLAPPEN] Type pointertype
'Fields End Type Local pt:pointertype=New pointertype Funktion(Varptr pt) Function Funktion(pointertotype:int ptr) 'code End Function Aber irgendwie klappt das nicht. Er spuckt keine Fehlermeldug aus, aber macht auch nix. Ich brauche das, um eine API-Funktion aufrufen zu können. Sie verlangt nämlich einen Pointer auf eine Struktur. Wies jmd was ich falsch mache und wie man es richtig macht? MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
- Zuletzt bearbeitet von Der Eisvogel am Mi, Dez 31, 2008 23:50, insgesamt 2-mal bearbeitet
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du wirst keine BMax-Typen angeben können, weil diese einen internen overhead haben, der es unmöglich macht für eine C-Funktion dort etwas hineinzuschreiben ohne dein Programm zum absturz zu bringen. | ||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Soll ich das dann wie in BB auch schon mit Banken machen? | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde einfach speicher allocieren der genau so groß wie die Struktur ist, und dann die struktur-daten daraus auslesen. Angeblich kann man auch Types nehmen, wenn diese in einem Extern-Block definiert sind. Allerdings hatte ich damit bis jetzt nicht sonderlich viel erfolg. | ||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Muss ich das jetzt verstehen?
Kannst du mir nen Beispiel geben, wie du das jetzt meinst? EDIT: Un wenn ich das in Extern setzte, dann kann ich ja kein New mehr benutzen, wie muss ich das denn dann machen, also einen neuen Type-Eintrag machen? |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Types, die in Extern-Blöcken deklariert werden, müssen mit C(++)-Funktionen erstellt und gelöscht werden, die ebenfalls Extern deklariert werden. Ein Beispiel dazu ist in den BlitzMax Docs drin.
Für WinAPI-Funktionen reicht es aber, Byte Ptr für den Typ anzugeben. BlitzMax übergibt dann automatisch einen Zeiger auf die eigentlichen Daten des Types. Übrigens sind Type-Handles schon Zeiger, d.h. du brauchst kein Varptr zu verwenden: Code: [AUSKLAPPEN] Type TPointerType
' ... End Type Local pt:TPointerType = New TPointerType Funktion(pt) Function Funktion(x:TPointerType) ' ... End Function |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Irgendwie geht es aber nicht. Die Funktion macht zwar etwas, aber nicht das, was sie machen sollte. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Suco-XBetreff: .... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gibt relativ viele Möglichkeiten. Habe dir einfach mal 3 Beispiele zu der WinAPI Funktion "GetCursorPos" gemacht. Diese Funktion gibt dir die Mauskoordinaten(Vom Desktop) aus und erwartet als übergabe eine Struktur namens Point mit den Werten x und y.
Type Variante: Code: [AUSKLAPPEN] Strict Type TPoint Field x:Int, y:Int End Type Extern "win32" Function GetCursorPos(lpPoint:Byte Ptr) End Extern Graphics 800,600,0 Local mouseCoords:TPoint = New TPoint Repeat Cls GetCursorPos(mouseCoords) DrawText "MouseX: "+mouseCoords.x, 10,0 DrawText "MouseY: "+mouseCoords.y, 10, 30 Flip Until KeyHit(KEY_ESCAPE) Variante mit dem reservieren vom Speicher Code: [AUSKLAPPEN] Strict Extern "win32" Function GetCursorPos(lpPoint:Byte Ptr) End Extern Graphics 800,600,0 Local mem:Byte Ptr = MemAlloc(8) Repeat Cls GetCursorPos(mem) DrawText "MouseX: "+Int Ptr(mem)[0], 10,0 DrawText "MouseY: "+Int Ptr(mem)[1], 10, 30 Flip Until KeyHit(KEY_ESCAPE) Und die letzte Variante, Banks. Code: [AUSKLAPPEN] Strict Extern "win32" Function GetCursorPos(lpPoint:Byte Ptr) End Extern Graphics 800,600,0 Local bank:TBank = CreateBank(8) Repeat Cls GetCursorPos(BankBuf(bank)) DrawText "MouseX: "+PeekInt(bank,0), 10,0 DrawText "MouseY: "+PeekInt(bank,4), 10, 30 Flip Until KeyHit(KEY_ESCAPE) Das mit den Types klappt nur wenn du dich an die richtigen Datentypen hälst und bei Strukturen die wiederrum Strukturen erwarten wird es etwas komplizierter. Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt gehts, aber ich weiß nicht, was ich ich vorher anders hatt, war bestimmt irgendein bescheuerter Fehler. Danke euch 3en.
EDIT: Geth doch nicht. Also sagen wir es so, es geht halb. Alle Ints von dem Type gehen, aber der String, der an letzter Stelle ist, der geht nicht. Warum. In der Strukturbeschreiben steht "null-terminated string" und das ist doch in BM ein einfacher String. Wenn ich da jetzt auch noch ein Chr(0) dranhänge gehts leider auch nicht. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wäre es der Weltuntergang die gemeinte Struktur vielleicht mal zu veröffentlichen?
Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nö, NOTIFYICONDATA | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann sollte der Type so aussehen:
Code: [AUSKLAPPEN] Type NOTIFYICONDATA Field cdSize:Int Field hWnd:Int Field uID:Int Field uFlags:Int Field uCallbackMessage:Int Field hIcon:Int Field szTip:Byte Ptr = MemAlloc(64) Method getTip:String() Return String.FromCString(szTip) End Method Method setTip(str:String) szTip = str.ToCString() End Method End Type Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
So jetzt hab ich das gemacht. Aber wenn ich jetzt mit der Maus über das Icon gehe ist es sofort weg. Ich habe das Feld hWnd mit GetActiveWindow gefüllt. | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne Code nix los. | ||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Import pub.win32
Graphics 640,480 icon=LoadTrayIcon("icon.ico") tray_icon=SetTrayIcon(GetActiveWindow(),icon,"Hallo") DrawText "Icon gesetzt",10,10 Flip WaitKey DeleteTrayIcon(tray_icon) DrawText "Icon gelöscht",10,30 Flip WaitKey Const IMAGE_ICON=1 Const LR_LOADFROMFILE=$10 Const LR_DEFAULTSIZE=$40 Const NIM_ADD=$0 Const NIM_MODIFY=$1 Const NIM_DELETE=$2 Type NOTIFYICONDATA Global list=CreateList() Field bank:TBank Field cbSize:Int Field hWnd:Int Field uID:Int Field uFlags:Int Field uCallbackMessage:Int Field hIcon:Int Field szTip:Byte Ptr=MemAlloc(64) Method New() ListAddLast(list,Self) bank=CreateBank(88) cbSize=SizeOf(Self) uFlags=NIF_MESSAGE Or NIF_ICON Or NIF_TIP End Method Method SetTip(tip$) szTip=tip.ToCString() End Method End Type Extern "Win32" Function Shell_NotifyIconA(dwMessage,lpData:Byte Ptr) Function LoadImageA(hInst,lpsz$,un1,n1,n2,un2) End Extern Function LoadTrayIcon(icon_name$) Return LoadImageA(0,icon_name,IMAGE_ICON,0,0,LR_DEFAULTSIZE Or LR_LOADFROMFILE) End Function Function SetTrayIcon(hWnd,hIcon,szTip$) Local nid:NOTIFYICONDATA=New NOTIFYICONDATA nid.hWnd=hWnd nid.uID=12 nid.hIcon=hIcon nid.SetTip(szTip) DebugLog Shell_NotifyIconA(NIM_ADD,nid) Return HandleFromObject(nid) End Function Function DeleteTrayIcon(hTrayIcon:Int) Local nid:Object=HandleToObject(hTrayIcon) Return Shell_NotifyIconA(NIM_DELETE,nid) End Function Irgendwie geht jetzt auch das Icon selber nicht mehr. Es kommt nur noch ne leere Fläche. Weis nicht was ich jetzt gemacht habe. In Blitz3D Habe ich das alle hinbekommen. ![]() Ich hoffe, dass ich das in BMax auch noch schaffe. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weiß nich ob es daran liegt, aber in:
Code: [AUSKLAPPEN] Type NOTIFYICONDATA Global list=CreateList() Field bank:TBank die liste und die bank... weiß nicht ob das darein darfst, weil du das ja an c++ übergibt, und c++ nicht weiß was es sein soll, bzw denkt es gehört zu einem integer oder so. |
||
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Meister_Dieb hat Folgendes geschrieben: die liste und die bank... weiß nicht ob das darein darfst, weil du das ja an c++ übergibt,
und c++ nicht weiß was es sein soll, bzw denkt es gehört zu einem integer oder so. Nein, das darf da nicht rein. C++ schreibt da sonst einfach irgendwas rein. Es wird nicht auf Variablennamen o.Ä. geachtet, damit man was ordentliches zurückbekommt muss man die Variablen in der richtigen Reihenfolge und mit dem richtigen Typ angeben. |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh, mist das hab ich in meinem vielen rumprobiren rein geschrieben danke jungs.
EDIT: Naja jetzt bleibt das Icon wieder, aber ein Bild ist immernoch nicht da, und der Tooltip geht auch nicht. EDIT: Das Problem mit dem Icon ist, das es nicht geldaen wird. GetLastError gibt den Code 1813 aus. Aber ich weis nicht, was ich falsch mache. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group