C und Disphelper

Fragen zu allen anderen Programmiersprachen.
Andi
Beiträge: 79
Registriert: 27.05.2008 17:29
Wohnort: Berlin

C und Disphelper

Beitrag von Andi »

Ich muss, bevor ich mein Problem schildere, eines vorwegsagen: PB ist super. Das ist genau die Sprache, die ich brauche, um die von mir benötigten Anwendungen zu schreiben. Dazu gehört insbesondere das Einbinden von Word mittels PureDisphelper bzw. jetzt ComatePlus.

Ich habe mit C ein wenig angefangen, um meinen Programmierhorizont zu erweitern. Ich kann einfache GUIs erstellen, und nun will ich Word einbinden und zwar mittels der Disphelper-Lib. Aber ich bekomme beim Kompilieren die Fehlermeldung:
[Linker Error] undefined reference to 'WinMain@16'
Was mache ich da falsch??

PS
Ich benutze den Bloodshed-Compiler
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Andi hat geschrieben: Ich kann einfache GUIs erstellen, und nun will ich Word einbinden und zwar mittels der Disphelper-Lib. [...]
PS
Ich benutze den Bloodshed-Compiler
Du benutz einen PB Source/PB Userlib mit einem C Compiler?
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Wenn WinMain nicht definiert ist, heißt das, dass du dein Projekt als Windows Anwendung
linken lässt, obwohl du keine WinMain Methode implementiert hast.

Es gibt 2 mögliche Lösungen dafür: Entweder lässt du deine Projekt als Konsolenprogramm kompilieren
(Stichwort Subsystem, so heißt das Ganze), oder du implementierst deine WinMain Methode
anstatt einer normalen int main(). Wie diese Funktion auszusehen hat, findest du via Google...
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

cxAlex hat geschrieben:
Andi hat geschrieben: Ich kann einfache GUIs erstellen, und nun will ich Word einbinden und zwar mittels der Disphelper-Lib. [...]
PS
Ich benutze den Bloodshed-Compiler
Du benutz einen PB Source/PB Userlib mit einem C Compiler?
Für PB gibts die PureDisphelper Library welche eine Opensource Library namens Disphelper wrappt :wink:
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

milan1612 hat geschrieben: Für PB gibts die PureDisphelper Library welche eine Opensource Library namens Disphelper wrappt :wink:
Ah... Wieder mal was gelernt.

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Der in PureDispHelper enthaltene DispHelper.lib ist für Purebasic von mir modifiziert worden.
Must dir mal den Orginalcode mal downloaden.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Andi
Beiträge: 79
Registriert: 27.05.2008 17:29
Wohnort: Berlin

Beitrag von Andi »

Danke, für die Hinweise! In der Tat muss es eine Window Application sein und darf kein Konsolenprogramm sein. Ich habe jetzt die folgenden Zeilen C-Code am Anfang der int WINAPI WinMain(HINSTANCE hInstance,....):

Code: Alles auswählen

    DISPATCH_OBJ(wdApp);
    dhInitialize(TRUE);
    dhToggleExceptions(TRUE);
    dhCreateObject(L"Word.Application", NULL, &wdApp);
    dhPutValue(wdApp, L".Visible = %b", TRUE);
    dhCallMethod(wdApp, L".Documents.Add");
    dhCallMethod(wdApp, L".Selection.TypeText(%S)", L"DispHelper Word    sample!\n\n");
   SAFE_RELEASE(wdApp);
   dhUninitialize(TRUE); 
Das klappt auch. Aber ich möchte, dass das Worddokument sozusagen auf Knopfdruck erstellt wird. Dazu habe ich einen Button erstellt. Wenn ich aber die obigen Zeilen in das Eventhandling (WM_Command) für diesen Button innerhalb der Callback-Prozedur packe, bleibt der Compiler schon bei DISPATCH_OBJ(wdApp) hängen und meldet: Syntax error before '*' token.
Wäre toll, wenn mir da jemand helfen könnte....
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Andi
Beiträge: 79
Registriert: 27.05.2008 17:29
Wohnort: Berlin

Beitrag von Andi »

Das Problem habe ich dadurch gelöst, indem ich die Zeile DISPATCH_OBJ(wdApp) vor die WinMain-Funktion gesetzt habe. Damit wird wdApp global und dann läuft es! :)
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Antworten