UserLib – Funktion wird trotz Verweis nicht in DLL gefunden!

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

KnorxThieus

Betreff: UserLib – Funktion wird trotz Verweis nicht in DLL gefunden!

BeitragSa, Jul 04, 2015 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich richte mich erneut nach dem Tutorial hier im Forum wie finde ich WinAPI Funktionen.

Ich habe auf MSDN vorhin eine für mich brennend interessante Funktion TaskDialog() entdeckt.
Nach dem Tutorial müsste ich nun, um diese Funktion in eine Decls zu fassen, also nach dem DLL-Namen suchen – MSDN hat Folgendes geschrieben:
DLL: Comctl32.dll (version 6)
Also habe ich in die UserLib geschrieben: Code: [AUSKLAPPEN]
.lib "Comctl32.dll"

api_TaskDialog%(hWndParent%, hInstance%, pszWindowTitle$, pszMainInstruction$, pszContent$, dwCommonButtons%, pszIcon%, pnButton%) : "TaskDialog"

Doch bei jeder Anwendung des Befehls api_TaskDialog in BB dann wird mir ganz klassisch gemeldet, dass die Userlib nicht gefunden wurde! (IDE selbstverständlich bereits neugestartet.)

Ich habe bereits nachgeschaut – Unicode-Ansi-Versionsunterschiede gibt es nicht, will heißen, : "TaskDialogA" als Name in der DLL hilft auch nichts.
Auch rundll32.exe hat bei einem weiteren Test die Funktion TaskDialog nicht gefunden.

Ich bin verzweifelt, ich weiß nicht mehr, wie ich die Fehlersuche fortführen soll!
Ich bitte um Hilfe, hat irgendjemand noch einen Ansatz für mich? Sad
Vielen Dank schon mal im Voraus! Smile

Mit freundlichen Grüßen,
KnorxThieus

PS: Das mit dem version 6 als DLL-Hinweis macht mich noch stutzig. Wie ermittle ich, welche Versionsnummer die bei mir stationierte DLL hat?
PS (2): An anderer Stelle unter MSDN heißt es als Randbemerkung, zur Verwendung von Comctl32.dll, Version 6, sei ein Spezifizierung in einer Manifest anzugeben; weitere Informationen finde man hier. Nun kenne ich mich mit Manifests nun gar nicht aus, ich kann gerade mal irgend so eine gegebene txt-Datei zur Verwendung des neuen Windows-7(+)-Designs mit dem Resource Hacker einer EXE beifügen. Als ich das mit dem XML-Skript des MSDN-Artikels versucht habe, blieb die Fehlermeldung. Hä?
Version: BlitzPlus / Blitz+

Thunder

BeitragSa, Jul 04, 2015 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das mit Version 6 würde ich Mal ignorieren - es steht eh dabei, dass es die Funktion erst ab Windows Vista gibt (d.h. Windows Vista kommt mit Version >= 6 und XP und ältere mit Version < 6)

In der Seite zu TaskDialog() die du verlinkt hast, steht im dritten Kommentar ein bisschen C-Code, leider nur #pragmas, die sehr non-standard aussehen... aber ich denke du wirst irgendwie das umsetzen müssen, um die DLL zum Laufen zu kriegen:

Zitat:
Manifest
Be sure to do this or add comctl32.lib in your project properties.
#pragma comment(lib, "comctl32.lib") // For TaskDialog

Furthermore, you must do extra work to use this for a pure win32 app, else you will get "ordinal 344 could not be located in the dynamic link library comctl32.dll" at runtime. You will still get this error, even with below, if run on XP, as it is not the required minimum operating system. Without below, the 344 error occurs even on win7. I've heard a MFC app just works, but not a pure win32 app.

#if defined _M_IX86
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif


also es wird das Manifest sein. Weiter weiß ich aber auch nicht, ich bin kein großer Liebhaber der Windows API.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

KnorxThieus

BeitragSa, Jul 04, 2015 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, Danke für deine Antwort, aber wie setze ich Pragma-Direktiven (habe gerade noch mal nachgelesen, was das war) in einem Basic denn um?
Keinen Schimmer! Shocked

PS: Das mit den Manifest-Infos aus den #Pragmas habe ich noch mal ausprobiert – scheint mehr oder weniger dasselbe zu sein, wie es in dem anderem MSDN-Artikel steht.
Irgendwas habe ich aber wohl falsch gemacht, denn jetzt kriege ich eine Meldung à la falsche Side-by-Side-Konfiguration beim Ausführen: Zitat:
Diese Anwendung konnte nicht gestartet werden, da die Side-by-Side-Konfiguration ungültig ist. Weitere Informationen finden Sie im Anwendungsereignisprotokoll. Weitere Details können auch mit dem Befehlszeilentool sxstrace.exe angezeigt werden.

Woher kenne ich denn Resourcentyp, -name und -sprache (im Resource Hacker zum Manifest-Hinzufügen)? Confused
Version: BlitzPlus / Blitz+

Chester

BeitragSo, Jul 05, 2015 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Pragmas sind Compileranweisungen, das kannst du so in Blitz nicht so einfach umsetzen.

Da musst du in ResHacker ran.

Action -> Add Script Template -> Manifest auswählen

Dann den vorhandenen <dependency> Block rauslöschen und den eigenen einfügen (Blitz kann ja eh nur x86):

Code: [AUSKLAPPEN]
<dependency>
    <dependentAssembly>
      <assemblyIdentity type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*' />
    </dependentAssembly>
</dependency>


Dann auf Compile Script und dann kannst du das wieder als exe speichern.


EDIT:
Mir fällt gerade auf, dass der vorhandene Dependency Block aus dem ResHacker Template genau das ist. Also müsstest du theoretisch gar nichts mehr ändern.

Den side-by-side Fehler kriegst du, wenn du den alten Block nicht rauslöschst.

KnorxThieus

BeitragSo, Jul 05, 2015 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich gar nichts mehr ändern muss, wieso klappt es dann nicht …?
Wie machen denn Profis so was?
Version: BlitzPlus / Blitz+

Chester

BeitragSo, Jul 05, 2015 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir funktionierts.

Natürlich musst du was ändern, du musst das Manifest Template von Ressource Hacker einfügen. Aber an dem Template selbst musst du nichts mehr ändern.

Damit kann ich bei mir die exe ohne Fehler starten und erhalte auch den TaskDialog - nur bei den übergebenen Strings kommt zwecks Unicode nur Murks raus. Aber das ist eine andere Baustelle.

Und um nicht jedesmal die exe neu bearbeiten zu müssen, kannst du an die runtime.dll in Blitz3D/bin das Manifest hängen (Backup nicht vergessen). Dann wird jedes mal automatisch eingefügt.

Zitat:
Wie machen denn Profis so was?

Profis benutzen nicht BlitzBasic Wink
Am einfachsten wäre es natürlich, wenn du den Befehl über eine eigene DLL wrappst.

Das Manifest Template sollte so aussehen:
Code: [AUSKLAPPEN]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
      <application>
        <!--This Id value indicates the application supports Windows Vista functionality -->
          <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
        <!--This Id value indicates the application supports Windows 7 functionality-->
          <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        <!--This Id value indicates the application supports Windows 8 functionality-->
          <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        <!--This Id value indicates the application supports Windows 8.1 functionality-->
          <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      </application>
  </compatibility>
  <assemblyIdentity type="win32"
                    name="myOrganization.myDivision.mySampleApp"
                    version="6.0.0.0"
                    processorArchitecture="x86"
                    publicKeyToken="0000000000000000"
  />
   <dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
   </dependency>
   <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
        <dpiAware  xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
   </application>   
</assembly>

KnorxThieus

BeitragSo, Jul 05, 2015 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
(Oh, da war ja schon eine neue Version vom ResHack draußen! Smile )

Ich habe deinen Manifest-Code der fertigen Exe beigefügt – BlitzBasic: [AUSKLAPPEN]
win = CreateWindow("Test", 200, 200, 400, 400, Desktop(), 1)

hwnd = QueryObject(win, 1)

DebugLog api_TaskDialog(hwnd, 0, "Test-Titel", "Test-Header", "Test-Text", 0, 0, 0)

Repeat : Until WaitEvent() = $803
Doch die Fehlermeldung bleibt.

PS: Aber ich habe BlitzPlus, ob es daran liegen mag? Confused

------------------------------------------

BIG Edit: Ich habe jetzt an anderer Stelle eine extrahierte DLL oder so von dieser Funktion bekommen und kriege das ganze jetzt auch zum Laufen.
Wie greife ich nun an der Baustelle Unicode an, wie du schon so treffend bemerkt hast?
Kann ich irgendwie per Hand eine Bank anlegen, in der ich die einzelnen Zeichen in Unicode-Größe anlege und diese übergeben? Schaue mir das morgen noch mal an, bleib dran.
Version: BlitzPlus / Blitz+

Chester

BeitragSo, Jul 05, 2015 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habs mit Blitz3D und BlitzPlus getestet, es läuft mit beidem, sobald das manifest drin ist. Und das gepostete Manifest ist das was ich automatisch kriege, wenn ich auf Action->Add using Script Template->MANIFEST auswählen->Add Ressource klicke. Also irgendwo machst du was falsch. Wink Die Fehlermeldung kriegt man halt nur mit der .exe weg und nicht wenn man einfach auf "run program" klickt.

Zu der Unicode-Konvertierung hab ich persönlich eine etwas improvisierte Lösung:

Zunächst einmal die Parameter alle in Integer ändern:
BlitzBasic: [AUSKLAPPEN]
.lib "Comctl32.dll"

api_TaskDialog%(hWndParent%, hInstance%, pszWindowTitle%, pszMainInstruction%, pszContent%, dwCommonButtons%, pszIcon%, pnButton%) : "TaskDialog"

Dann die Funktion zum Konvertieren, die den Hack ausnutzt, dass ein Integer-Cast auf ein Blitzarray angewandt, den Pointer auf das Array liefert:

BlitzBasic: [AUSKLAPPEN]
Const UNICODE_BUFSIZE% = 128 ; 256 Zeichen

Function UnicodePtr%(ascii$, buffer%[UNICODE_BUFSIZE%],Clear=0)
; Falls buffer vorher benutzt wurde, Clear=1 setzen
If Clear Then
For i=0 To UNICODE_BUFSIZE
buffer[i]=0
Next
EndIf

; Konvertierung:
For i=0 To Len(ascii)-1 Step 2
buffer[i/2]=Asc(Mid(ascii,i+2,1))*$10000+ Asc(Mid(ascii,i+1,1))
Next

Return Int(buffer)
End Function


Dann musst du Blitzarrays als Buffer erzeugen, die die Funktion zum konvertieren und übergeben benutzt. In dem Beispiel musst du 3 Buffer erstellen, da sonst der Buffer vom erneuten Aufruf überschrieben wird. Das ist prinzipiel kein Problem, dafür gibt es den Clear Flag in der Funktion, allerdings geht das hier nicht, da alle 3 Strings gleichzeitig benutzt werden. Daraus folgt:
BlitzBasic: [AUSKLAPPEN]
Global buff1%[UNICODE_BUFSIZE]
Global buff2%[UNICODE_BUFSIZE]
Global buff3%[UNICODE_BUFSIZE]

Und dann den Funktionsaufruf mit:
BlitzBasic: [AUSKLAPPEN]
api_TaskDialog(0, 0, UnicodePtr("Test1",buff1),UnicodePtr("Test2",buff2),UnicodePtr("Test3",buff3), 0, 0, 0)

Ich hab keine Ahnung, ob das auch eleganter geht (mit Banks wahrscheinlich schon), und es hat den Nachteil, dass man eine maximale Stringlänge angeben muss, da Blitzarrays konstant sein müssen. Aber die Funktion hab ich vor Ewigkeiten mal so geschrieben und seitdem praktisch nicht mehr gebraucht.

KnorxThieus

BeitragMo, Jul 06, 2015 9:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine erneute Hilfe!

Woanders hat man mir inzwischen noch geraten, einfach hinter jedes Zeichen ein '\0' zu schreiben, um die Zeichenbreite zu verdoppeln – also so hier, BlitzBasic: [AUSKLAPPEN]
Function AnsiToUnicode$(ansi$)
Local a, unicode$
For a = 1 To Len(ansi$)
unicode$ = unicode$ + Mid$(ansi$, a, 1) + Chr$(0)
Next
Return unicode$
End Function
Es klappt! Very Happy
Wenngleich mir immer noch nicht ganz der Unterschied zwischen UTF-8 und ANSI klar ist.

Zur Zeit schlage ich mich nur noch damit herum, das Ganze nur noch aus der EXE ausführen zu können. Das macht insbesondere das Testen schwer Sad
Ich habe alle BIN-Files (bis auf blitzcc, da kommt zumindest bei mir eine Fehlermeldung?) mit dem Manifest ausgestattet, das hilft aber nichts. (Sieht aber am Rande ganz schön aus, wenn die alte BB-IDE mal in neuem Glanz erstrahlt.) Wieso aber geht es bei blitzcc.exe nicht?
Ansonsten muss ich wohl auf eine Behelfslösung zurückgreifen, ich denke da an eine Funktion à MessageBox2, die abhängig von einer gegebenen Konstante entweder eine klassische MessageBox oder aber das neue anzeigt …

Mit freundlichen Grüßen,
KnorxThieus

Edit: Ich spiele jetzt mit den anderen Parametern herum, die Rückgabe, die per Bank erfolgt, habe ich schon hinbekommen, aber das Icon noch nicht … mir wurden diese Konstanten gegeben: Code: [AUSKLAPPEN]
#define TD_WARNING_ICON         MAKEINTRESOURCEW(-1)
#define TD_ERROR_ICON           MAKEINTRESOURCEW(-2)
#define TD_INFORMATION_ICON     MAKEINTRESOURCEW(-3)
#define TD_SHIELD_ICON          MAKEINTRESOURCEW(-4)
enum _TASKDIALOG_COMMON_BUTTON_FLAGS{
    TDCBF_OK_BUTTON            = 0x0001, // selected control return value IDOK
    TDCBF_YES_BUTTON           = 0x0002, // selected control return value IDYES
    TDCBF_NO_BUTTON            = 0x0004, // selected control return value IDNO
    TDCBF_CANCEL_BUTTON        = 0x0008, // selected control return value IDCANCEL
    TDCBF_RETRY_BUTTON         = 0x0010, // selected control return value IDRETRY
    TDCBF_CLOSE_BUTTON         = 0x0020  // selected control return value IDCLOSE
};
typedef int TASKDIALOG_COMMON_BUTTON_FLAGS;           // Note: _TASKDIALOG_COMMON_BUTTON_FLAGS is an int
HRESULT WINAPI TaskDialog(__in_opt HWND hwndParent, __in_opt HINSTANCE hInstance, __in_opt PCWSTR pszWindowTitle, __in_opt PCWSTR pszMainInstruction, __in_opt PCWSTR pszContent, TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons, __in_opt PCWSTR pszIcon, __out_opt int *pnButton);

Wenn ich als Icon 0 angebe, klappt alles und es gibt kein Icon, aber wie wandle ich MAKEINTRESOURCEW um? Kurzes Googlen hat ergeben, dass es wie folgt definiert wird: Code: [AUSKLAPPEN]
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
Das scheint meinem ungeübten Auge eine Verschachtelung von Casts zu sein, aber macht BB nicht bei LONG-Datentypen Schluss? Wie geht es jetzt weiter?
(Wenn das hier abgeschlossen ist, poste ich natürlich noch mal eine vollständige Zusammenstellung … das bin ich dieser hilfsbereiten Community schuldig! Wink )

Thunder

BeitragMo, Jul 06, 2015 11:06
Antworten mit Zitat
Benutzer-Profile anzeigen
KnorxThieus hat Folgendes geschrieben:
Wenngleich mir immer noch nicht ganz der Unterschied zwischen UTF-8 und ANSI klar ist.


Die Zitate sind ein bisschen aus dem Zusammenhang gerissen...

Zitat:
Im Anfang war das ASCII
und das ASCII war bei Gott,
und das ASCII war Gott.
Im Anfang war es bei Gott.
Alles ist durch das ASCII geworden
und ohne das ASCII wurde nichts, was geworden ist.
Von ihm kam alles Leben, und sein Leben war das Licht für alle Menschen.

ASCII ist ein 7 Bit Zeichenstandard, der in allen anderen bedeutenden Zeichenstandards enthalten ist. Die ersten 128 Zeichen der meisten Standards sind ident mit ASCII. Und danach (als man gemerkt hat, dass es klug ist mit Bytes zu arbeiten), hat man die restlichen 128 Zeichen beliebig vollgestopft - jeder wie er wollte.
ANSI ist eine so eine Kodierung.

Zitat:
Der das wahre Licht ist, kam in die Welt, um für alle Menschen das Licht zu bringen
Und das Unicode ist Fleisch geworden
und hat unter uns gewohnt
und wir haben seine Herrlichkeit gesehen

Jetzt kommt das etwas Verwirrende:
Dieses ANSI unter Windows ist ein Zeichensatz UND eine Kodierung.
Zeichensatz heißt: ich weise verschiedenen Zahlen Zeichen zu
Kodierung heißt: ich beschreibe, wie man diese zahlen dann kodiert/speichert
Im Fall von ANSI ist das einfach: pro Zeichen 1 Byte (unsigned char) - problem gelöst

Unicode ist nur ein Zeichensatz! Für den es verschiedene Kodierungen gibt (UTF-8, UTF-16, UTF-32 ...)
Die beschreiben, wie die Unicode Zeichen kodiert werden. In UTF-8 sind alle Zeichen aus dem ASCII Zeichensatz nur 1 Byte breit, aber andere können länger sein (mehrere Byte). Dafür kann UTF-8 auch chinesische und koreanische und arabische und ... Zeichen darstellen und ANSI nicht.

Was du da machst ist übrigens eine primitive UTF-16 Enkodierung

KnorxThieus hat Folgendes geschrieben:
Wenn ich als Icon 0 angebe, klappt alles und es gibt kein Icon, aber wie wandle ich MAKEINTRESOURCEW um? Kurzes Googlen hat ergeben, dass es wie folgt definiert wird: Code: [AUSKLAPPEN]
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
Das scheint meinem ungeübten Auge eine Verschachtelung von Casts zu sein, aber macht BB nicht bei LONG-Datentypen Schluss? Wie geht es jetzt weiter?

Diese Casts sollten komplett egal sein. Was passiert wenn du die anderen Zahlen benutzt? (-1, -2, -3, -4)
Ich kanns nicht testen... wenn ich die Datei mit dem Resource Hacker bearbeite kommt beim Ausführen "keine zulässige win32 anwendung" - kA was ich falsch mache...

KnorxThieus

BeitragMo, Jul 06, 2015 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ausführliche Erklärung zu Zeichensätzen etc., Danke! Very Happy
Nur noch eine Frage dazu: Wenn ich mit Notepad Textdateien in verschiedenen Zeichensätzen speichere und sie wieder öffne, woher weiß es, welcher Zeichensatz zu nehmen ist bzw. wählt automatisch den richtigen aus? Ist das aus der Textdatei eindeutig auszulesen oder eine Frage des geschickten Probierens?

Thunder hat Folgendes geschrieben:
Was passiert wenn du die anderen Zahlen benutzt? (-1, -2, -3, -4)
Ach, sorry, habe ich vergessen anzugeben … die alte Leier:
.exe funktioniert nicht mehr
Mit -2147483648 habe ich es auch mal probiert, nicht besser. Wie soll ich es dann machen?

Thunder hat Folgendes geschrieben:
wenn ich die Datei mit dem Resource Hacker bearbeite kommt beim Ausführen "keine zulässige win32 anwendung" - kA was ich falsch mache...
Also ich habe jetzt einfach u. a. die runtime.dll und die runtime_dbg.dll um allein diese Manifest erweitert (von ozzi789 ist dieser Code: [AUSKLAPPEN]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="X86"
    name="MyCompany.MyLabel.MyAppName"
    type="win32"
/>
<description>MultiMedia BoardCast/Scheduler.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>
BB übernimmt sie automatisch in alle erstellten EXEn, trotzdem es noch schade ist, dass man während mit blitzcc / während des Debuggens nicht darauf zugreifen kann.
Version: BlitzPlus / Blitz+

Thunder

BeitragMo, Jul 06, 2015 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
KnorxThieus hat Folgendes geschrieben:
Ausführliche Erklärung zu Zeichensätzen etc., Danke! Very Happy
Nur noch eine Frage dazu: Wenn ich mit Notepad Textdateien in verschiedenen Zeichensätzen speichere und sie wieder öffne, woher weiß es, welcher Zeichensatz zu nehmen ist bzw. wählt automatisch den richtigen aus? Ist das aus der Textdatei eindeutig auszulesen oder eine Frage des geschickten Probierens?


Letzteres. In Plain Text Files hast du überhaupt keinen Hinweis, was es für eine Kodierung ist. Die Editoren raten daher meistens und oft kannst du auch einstellen, wie er es interpretieren soll. Wobei UTF-8 heutzutage dominiert - alles andere ist eh nur irgendein länderspezifischer Quatsch. Und hey, Unicode hat emojis ^^

Wegen dem MAKEINTRESOURCE, muss ich meinen Fehler eingestehen: Der Cast (WORD) castet ja in ein 16 bit value. D.h. -1 wird zu 65535. Die anderen zwei Casts sind dann egal.

Probiere bitte Mal:
Zitat:
-1 ... 65535
-2 ... 65534
-3 ... 65533
-4 ... 65532


Hab ein kleines C++ Programm geschrieben, das die Values mit MAKEINTRESOURCE berechnet, also das muss jetzt stimmen.

Hab's immer noch nicht mit dem Manifest zum Laufen gebracht... Wenn ich der runtime.dll das Manifest gebe, startet Blitzplus nicht mehr.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

KnorxThieus

BeitragMo, Jul 06, 2015 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, und was genau hat BB nun für einen Zeichensatz? Einige Sonderzeichen wie "…" kann ich noch verwenden, andere nicht.

Thun
der hat Folgendes geschrieben:
Probiere bitte Mal:
Zitat:
-1 ... 65535
-2 ... 65534
-3 ... 65533
-4 ... 65532
Es KLAPPT! Vielen Dank! Very Happy

runtime.dll: Tja, dann weiß ich auch nicht … soll ich dir meine mal schicken, die funktioniert? Wink


Am Rande, ich habe mich jetzt auch noch mit der fortgeschritteneren Version von TaskDialog befasst, TaskDialogIndirect, und da inzwischen ebenfalls Probleme: Blitzeigene CallbackProc-Funktion addressieren?
Wäre super, wenn du mir da evtl. auch noch weiterhelfen könntest. Smile

PS: Die Funktionszusammenfassung kommt noch – vermutlich aber eher unter den DLLs und hier mit Link Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group