MFC und ANSI c?
-
Du kannst zwar kein C Programm schreiben das die MFC benutzt, aber ein MFC Programm, dass deine C-Routinen verwendet
-
Also wie würde ich das denn (jetzt mal praktisch) machen??
Ich möchte zb. in der OnOk Funktion meines Buttons eine Funktion aufrufen die ich in C geschrieben habe..
Wie rufe ich diese Funktion auf
und wie binde ich diese Funktion in mein C++ Programm ein??gruß
ninchen
-
du bindest die *.c datei in dein projekt ein, schreibst in deinem c++ header
den prototyp dafür reinextern "C"
{
int MeineCFunktion();
}und rufst sie ganz normal auf
-
Also ich habs jetzt auf zwei verschieden arten probiert..
einmal mit
#include "meincprogramm.h"
da krieg ich lauter fehler...
und bei
extern "meincprogramm.c"
bekomm ich den fehler das er die datei nicht findet obwohl sie im ordner ist.
-
mit einbinden mein ich, dass du die datei hinzufügst
rechtsklick->datei hinzufügen
-
Wenn ich die Datei einbinde bekomme ich immer folgenden Fehler beim Ausführen:
c:\eigene dateien\c projekte\hallo.c(342) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Wenn ich
extern.c
schreibe kommt immer noch der Fehler das er die Datei nicht findet...
C:\Eigene Dateien\C projekte\mfc\mfcDlg.cpp(13) : error C2537: 'huffmann.c' : illegal linkage specification
-
Ninchen schrieb:
Wenn ich die Datei einbinde bekomme ich immer folgenden Fehler beim Ausführen:
c:\eigene dateien\c projekte\hallo.c(342) : fatal error C1010: unexpected end of file while looking for precompiled header directive
in der ersten zeile der c datei muss
#include "stdafx.h"
stehenes geht auch ohne... aber hab jetzt keine lust das zu erklärn
sag bescheid obs funktioniert
-
Wenn ich in mein c projekt die datei stdafx.h einbinde bekomme
ich den folgenden fehler:not a precompiled header file created with this compiler
-
Geh mal unter Projekt -> Einstellungen -> Konfigurationseigenschaften -> C/C++ -> Vorkompilierte Header -> Erstellen/Verwenden eines Vorkompilierten Headers -> Vorkompilierte Header nicht verwenden
Auf Englisch heißt das ganze etwas anderst und unter VC6 musst du vllt. etwas suchen, aber so schaltet man sie prinzipiell aus
-
Ok.. fehler kommen nicht mehr aber irgendwie öffnet der keine meiner Funktionen.
Wie ruf ich zb die main meines c programms auf??
einfach mit main() ?
-
jedes programm hat nur "eine" main funktion
die main funktion wird vom "betriebssystem" aufgerufend.h. wenn du dein programm startest ist die erste und einzige funktion die aufgerufen wird die main funktion (es gibt ausnahmen aber das möcht ich jetzt nicht vertiefen)
erklär mal was du überhaupt machen willst...
oder probier ein minnimalbeispiel-> leeres konsolenprogramm
//main.cpp #include <iostream> using namespace std; extern "C" { int MeineCFunktion(); } int main() { cout << MeineCFunktion() << endl; return 0; }
//MeineCFunktion.c int MeineCFunktion() { return 100; }
-
Schreibe deine C-Funktion als Methode einer Klasse. Dann bindest du die Klasse ein.
-
Unix-Tom schrieb:
Schreibe deine C-Funktion als Methode einer Klasse. Dann bindest du die Klasse ein.
gibts in c neuerdings auch klassen?
-
Super!
Das hat auch funktioniert!Jetzt noch eine letzte Frage:
der algo den ich in meiner c datei hab dauert mitunter sehr lange und ich möchte eine progressbar einbauen die den status anzeigt.
ist es möglich diese mit meinem c programm zu steuern??
-
da fallen mir zwei einfache möglichkeiten ein
variante1:
int MeineCFunktion ( long *pProgress ); //du gibts der c-funktion einen zeiger auf eine variable //die c funktion erhöht den wert immer wieder //in deinem c++ programm läuft ein timer der die variable in nem bestimmten //intervall prüft und die progressbar danach einstellt
variante2:
//du schreibst in deinem c++ programm zwei neue funktionen void SetProgressRange ( long lRange ); void SetProgress ( long lProgress ); //und rufst sie von deiner c funktion aus auf
-
Einfach für jemanden der es kann
1. Wie erstelle ich den einen Timer?
2. Welcher Wert gibt den aktuellen wert der Progressbar an?
(meine bar heißt m_progress)
-
schau dir in der msdn mal die progressbar klasse an
zu den timern benutzt du am besten mal die suchfunktion des forums
-
Das funktioniert irgendwie nicht
ich bekomm immer die nachricht..
error C2660: 'MeineFunktion' : function does not take 2 parameters
obwohl ich im prototyp 2 parameter hab und auch 2 übergebe
-
was erwartest du jetzt als antwort?
wie wärs wenn du prototyp, c-funktion und aufruf in c++ als code postest?