VS C++ DLL in VB einfügen
-
lk schrieb:
Dieser Beitrag hilft dir nicht weiter, achtung!
Mach doch bitte die code-tags um den code.
int main() { printf("Hallo world from a very well formatted Forum beitrag!\n"); return 0; }
Bitte beschränk dich aufs mindeste. Du kannst das mindeste hier reinschreiben und sonst noch auf www.Pastebin.com verweisen mit 100% des codes.
Wenn du ihn schon ausbesserst, dann bitte nicht mit printf. Danke.
Edit:
Ausnahme, wenn printf ähnlich wie folgt definiert wurde:void printf(const char* str) { std::cout << str; } template <typename Head, typename... Tail> void printf(const char* str, Head&& head, Tail&&... tail) { while(*str != '%') std::cout << *str++; std::cout << head; printf(++str, std::forward<Tail>(tail)...); }
-
Das ist meiner Meinung nach schon das Minimalbeispiel.
Kann mir denn keiner helfen?
Gruß
-
asdfghjkl1234 schrieb:
Das ist meiner Meinung nach schon das Minimalbeispiel.
Kann mir denn keiner helfen?
GrußLies dir die Antwort von ik durch. Als Registrierter kannst du deinen Beitrag im Nachhinein ändern. So wie deine Eingangsfrage derzeit aussieht schließt man als Leser den Thread sofort wieder ohne ihn zu lesen. Und auch Codetags würden nicht helfen. Das ist kein Minimalbeispiel! Wen interessieren die 100 Funktionen die du das hast? Kannst du dein Problem nicht an einer Testanwendung mit einer einzigen Funktion verdeutlichen?
-
Also Strings musste ich in VBA immer byValue einbinden, sonst muss man in C/C++ noch dereferenzieren. Haste das für deine 2dim-Arrays bedacht?
-
Eine .dll unter windows kennt kein "main" als Einsprungspunkt, sondern nur DllMain:
http://msdn.microsoft.com/en-us/library/ms682583(v=vs.85).aspx
Wobei void main() mir alle Nackenhaare sträuben lässt. Benenn die Funktion sinnvoll.Ansonsten:
http://www.shadoware.de/vb/tutorials/cpp_in_vb.htmlUnd benutze bitte [ cpp ] tags.
-
Ich habe es jetzt einmal mit dieser Variante probiert nur leider stürzt VB jetzt immer nach dem Funktionsaufruf ab.
Deklaration
Declare Function MooreRukovenaDLL Lib "C:\...\MooreRukovenaDLL.dll" Alias "_MooreRukovenaDLL@4" (ByRef p As Double) As Double
Aufruf
MooreRukovenaDLL (DQ)
C++
extern "C" __declspec(dllexport) void WINAPI MooreRukovenaDLL(double*);
void WINAPI MooreRukovenaDLL(double* Dq) { *DQ = 1; }
Habe nur alle möglichen Varianten durch probiert und keine führt zum Ziel.
Ich bin mit meinem Latein am Ende...
-
du hast die Funktion in VB mit dem return-type double deklariert. In deinem c++ code ist der aber void. Moeglich das es daran liegt.
gruss
Dirk
-
hier noch ein Link:
http://support.microsoft.com/default.aspx?scid=kb;en-us;106553
und
http://www.go4expert.com/forums/showthread.php?t=129MfG f.-th.
-
Ich habe den Fehler jetzt eingegrenzt.
Und zwar deklariere ich in der DLL zwei 2D dynamische Float Felder, mit ca. 11000 Elementen in jeder Dimension. Wenn ich eines der Felder, egal welches, auskommentiere funktioniert meine DLL. Nur wenn ich beide zur gleichen Zeit verwende stürzt Excel ab.
Ich verstehe den Fehler nicht. Könnte es darin liegen, das die beiden Felder zusammengenommen für eine DLL zu groß sind?
Als Exe funktioniert der Code wunderbar.
-
Excel - DLL - VB oder VBA?
Je nach Version sind die Limits anders.
Hier mal ein Beispiel aus 2006:
http://www.xlam.ch/xlimits/visualbasic.htmKeine Ahnung ob du damit in Konflikt kommst?
Hier noch so was:
http://www.xlam.ch/xlimits/arrays.htmMfG f.-th.