<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[VS C++ DLL in VB einfügen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mich bereits durch zwei Bücher durchgeschlagen und Google gequält, doch leider bin ich weder mit dem einem noch dem anderen zurechtgekommen. Ich bin aber auch noch ein ziemlicher Anfänger in solchen Sachen.</p>
<p>Ich habe eine C++ Anwendung geschrieben und diese dann in eine DLL konvertiert.<br />
Die DLL möchte ich in einen bereits bestehenden VB-Code einfügen und später zwei zweidimensionale Felder übergeben und einen double Wert zurück bekommen.</p>
<p>Zum Testen übergebe ich bis jetzt allerdings noch keine Felder, lasse mir aber dennoch einen Wert zurückgeben der in der DLL berechnet wird. Dies geht, weil ich die Felder bis jetzt einfach in der DLL vorgegeben haben. Wenn ich die C++ Anwendung so über die Konsole ausführe funktioniert alles bestens. Wenn ich jedoch die DLL in VB aufrufe wird VB augenblicklich beendet. Ich habe keine Ahnung was die Ursache dafür ist. Ich habe hier mal meinen C++ Header und die Main-Funktion angegeben. Unten steht die Deklaration der Funktion in VB und deren Aufruf.</p>
<p>Ich habe schon viele Varianten durchprobiert aber es passiert immer das gleiche.</p>
<pre><code class="language-cpp">/*Header-Datei*/
#ifndef MR_H
#define MR_H

#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;cmath&gt;

using namespace std;

extern &quot;C&quot; __declspec(dllexport) void main(double*);

#endif

-------------------------------------------------------------------------
/*Main-Datei*/
#include &quot;MR.h&quot;

void main(double* DQ)
{
	/*Variablen Deklaration*/
	const double PI = 3.14159265;
	int iDim = 28;
	int iDim_R;
	double abstand = 141.421;
	double abstand_R;
	double id  = 2000;
	double r = id / 2;
	double r_BP = 81.923;
	short i;
	int geoTyp = 1;
	int Verteilung = 1;
	double L_Wert;
	double G_Wert;
	double T_Wert;

int* lageBP_Data;
	double* xKoordinaten_Data;
	double* yKoordinaten_Data;
	float* XR_Data;
	float* YR_Data;
	char* AnzahlUeberschneidungen_Data;
	double* xhLinienKoordinaten_Data;
	double* yvLinienKoordinaten_Data;

	int** lageBP;
	double** xKoordinaten;
	double** yKoordinaten;
	float** xKoordinaten_R;
	float** yKoordinaten_R;
	char** AnzahlUeberschneidungen;
	double** xhLinienKoordinaten;
	double** yvLinienKoordinaten;

	abstand_R = dimR(id);
	iDim_R = dimFeld(id, abstand_R);

	/*Speicherreservierung für ein dynamisches einiDimensionales Feld*/
	lageBP_Data = new int[iDim *iDim];
	xKoordinaten_Data = new double[iDim * iDim];
	yKoordinaten_Data = new double[iDim * iDim];
	XR_Data = new float[iDim_R * iDim_R];
	AnzahlUeberschneidungen_Data = new char[iDim_R * iDim_R];
	YR_Data = new float[iDim_R * iDim_R];

	/*Speicherreservierung für ein dynamisches Feld von Zeigern, welche auf die Zeilenanfänge weisen*/
	lageBP = new int*[iDim];
	xKoordinaten = new double*[iDim];
	yKoordinaten = new double*[iDim];
	xKoordinaten_R = new float*[iDim_R];
	yKoordinaten_R = new float*[iDim_R];
	AnzahlUeberschneidungen = new char*[iDim_R];

	/*Zuweisung der Zeilenanfänge*/
	for(i = 0; i &lt; iDim_R; i++)
	{
		xKoordinaten_R[i] = XR_Data + i * iDim_R;
		yKoordinaten_R[i] = YR_Data + i * iDim_R;
		AnzahlUeberschneidungen[i] = AnzahlUeberschneidungen_Data + i *iDim_R;
	}

	for(i = 0; i &lt; iDim; i++)
	{
		xKoordinaten[i] = xKoordinaten_Data + i * iDim;
		yKoordinaten[i] = yKoordinaten_Data + i * iDim;
		lageBP[i] = lageBP_Data + i * iDim;
	}
}
</code></pre>
<p>VB-Code:</p>
<p>Module:</p>
<p>Declare Function main Lib &quot;Pfad&quot; (ByRef pDQ) As Double</p>
<p>Main:</p>
<p>Dim pDQ<br />
main (pDQ)</p>
<p>Ich vermute, dass mein Syntax für die DLL falsch ist. Kann mir jemand sagen wo meine Fehler sind?</p>
<p>Vielen Dank im Voraus!<br />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290154/vs-c-dll-in-vb-einfügen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 07:14:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290154.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Jul 2011 13:06:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Mon, 01 Aug 2011 08:34:43 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mich bereits durch zwei Bücher durchgeschlagen und Google gequält, doch leider bin ich weder mit dem einem noch dem anderen zurechtgekommen. Ich bin aber auch noch ein ziemlicher Anfänger in solchen Sachen.</p>
<p>Ich habe eine C++ Anwendung geschrieben und diese dann in eine DLL konvertiert.<br />
Die DLL möchte ich in einen bereits bestehenden VB-Code einfügen und später zwei zweidimensionale Felder übergeben und einen double Wert zurück bekommen.</p>
<p>Zum Testen übergebe ich bis jetzt allerdings noch keine Felder, lasse mir aber dennoch einen Wert zurückgeben der in der DLL berechnet wird. Dies geht, weil ich die Felder bis jetzt einfach in der DLL vorgegeben haben. Wenn ich die C++ Anwendung so über die Konsole ausführe funktioniert alles bestens. Wenn ich jedoch die DLL in VB aufrufe wird VB augenblicklich beendet. Ich habe keine Ahnung was die Ursache dafür ist. Ich habe hier mal meinen C++ Header und die Main-Funktion angegeben. Unten steht die Deklaration der Funktion in VB und deren Aufruf.</p>
<p>Ich habe schon viele Varianten durchprobiert aber es passiert immer das gleiche.</p>
<pre><code class="language-cpp">/*Header-Datei*/
#ifndef MR_H
#define MR_H

#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;cmath&gt;

using namespace std;

extern &quot;C&quot; __declspec(dllexport) void main(double*);

#endif

-------------------------------------------------------------------------
/*Main-Datei*/
#include &quot;MR.h&quot;

void main(double* DQ)
{
	/*Variablen Deklaration*/
	const double PI = 3.14159265;
	int iDim = 28;
	int iDim_R;
	double abstand = 141.421;
	double abstand_R;
	double id  = 2000;
	double r = id / 2;
	double r_BP = 81.923;
	short i;
	int geoTyp = 1;
	int Verteilung = 1;
	double L_Wert;
	double G_Wert;
	double T_Wert;

int* lageBP_Data;
	double* xKoordinaten_Data;
	double* yKoordinaten_Data;
	float* XR_Data;
	float* YR_Data;
	char* AnzahlUeberschneidungen_Data;
	double* xhLinienKoordinaten_Data;
	double* yvLinienKoordinaten_Data;

	int** lageBP;
	double** xKoordinaten;
	double** yKoordinaten;
	float** xKoordinaten_R;
	float** yKoordinaten_R;
	char** AnzahlUeberschneidungen;
	double** xhLinienKoordinaten;
	double** yvLinienKoordinaten;

	abstand_R = dimR(id);
	iDim_R = dimFeld(id, abstand_R);

	/*Speicherreservierung für ein dynamisches einiDimensionales Feld*/
	lageBP_Data = new int[iDim *iDim];
	xKoordinaten_Data = new double[iDim * iDim];
	yKoordinaten_Data = new double[iDim * iDim];
	XR_Data = new float[iDim_R * iDim_R];
	AnzahlUeberschneidungen_Data = new char[iDim_R * iDim_R];
	YR_Data = new float[iDim_R * iDim_R];

	/*Speicherreservierung für ein dynamisches Feld von Zeigern, welche auf die Zeilenanfänge weisen*/
	lageBP = new int*[iDim];
	xKoordinaten = new double*[iDim];
	yKoordinaten = new double*[iDim];
	xKoordinaten_R = new float*[iDim_R];
	yKoordinaten_R = new float*[iDim_R];
	AnzahlUeberschneidungen = new char*[iDim_R];

	/*Zuweisung der Zeilenanfänge*/
	for(i = 0; i &lt; iDim_R; i++)
	{
		xKoordinaten_R[i] = XR_Data + i * iDim_R;
		yKoordinaten_R[i] = YR_Data + i * iDim_R;
		AnzahlUeberschneidungen[i] = AnzahlUeberschneidungen_Data + i *iDim_R;
	}

	for(i = 0; i &lt; iDim; i++)
	{
		xKoordinaten[i] = xKoordinaten_Data + i * iDim;
		yKoordinaten[i] = yKoordinaten_Data + i * iDim;
		lageBP[i] = lageBP_Data + i * iDim;
	}
}
</code></pre>
<p>VB-Code:</p>
<p>Module:</p>
<p>Declare Function main Lib &quot;Pfad&quot; (ByRef pDQ) As Double</p>
<p>Main:</p>
<p>Dim pDQ<br />
main (pDQ)</p>
<p>Ich vermute, dass mein Syntax für die DLL falsch ist. Kann mir jemand sagen wo meine Fehler sind?</p>
<p>Vielen Dank im Voraus!<br />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095366</guid><dc:creator><![CDATA[asdfghjkl1234]]></dc:creator><pubDate>Mon, 01 Aug 2011 08:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Wed, 20 Jul 2011 18:16:43 GMT]]></title><description><![CDATA[<p><em>Dieser Beitrag hilft dir nicht weiter, achtung!</em></p>
<p>Mach doch bitte die code-tags um den code.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    std::cout &lt;&lt; &quot;Hallo world from a very well formatted Forum beitrag!\n&quot;;
    return 0;
}
</code></pre>
<p>Bitte beschränk dich aufs mindeste. Du kannst das mindeste hier reinschreiben und sonst noch auf <a href="http://www.Pastebin.com" rel="nofollow">www.Pastebin.com</a> verweisen mit 100% des codes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095574</guid><dc:creator><![CDATA[lk]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:16:43 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Wed, 20 Jul 2011 18:31:42 GMT]]></title><description><![CDATA[<p>lk schrieb:</p>
<blockquote>
<p><em>Dieser Beitrag hilft dir nicht weiter, achtung!</em></p>
<p>Mach doch bitte die code-tags um den code.</p>
<pre><code class="language-cpp">int main()
{
    printf(&quot;Hallo world from a very well formatted Forum beitrag!\n&quot;);
    return 0;
}
</code></pre>
<p>Bitte beschränk dich aufs mindeste. Du kannst das mindeste hier reinschreiben und sonst noch auf <a href="http://www.Pastebin.com" rel="nofollow">www.Pastebin.com</a> verweisen mit 100% des codes.</p>
</blockquote>
<p>Wenn du ihn schon ausbesserst, dann bitte nicht mit printf. Danke.</p>
<p>Edit:<br />
Ausnahme, wenn printf ähnlich wie folgt definiert wurde:</p>
<pre><code class="language-cpp">void printf(const char* str)
        {
                std::cout &lt;&lt; str;
        }

        template &lt;typename Head, typename... Tail&gt;
        void printf(const char* str, Head&amp;&amp; head, Tail&amp;&amp;... tail)
        {
                while(*str != '%')
                        std::cout &lt;&lt; *str++;

                std::cout &lt;&lt; head;
                printf(++str, std::forward&lt;Tail&gt;(tail)...);
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2095577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095577</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:31:42 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Thu, 21 Jul 2011 08:01:56 GMT]]></title><description><![CDATA[<p>Das ist meiner Meinung nach schon das Minimalbeispiel.<br />
Kann mir denn keiner helfen?<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095866</guid><dc:creator><![CDATA[asdfghjkl1234]]></dc:creator><pubDate>Thu, 21 Jul 2011 08:01:56 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Thu, 21 Jul 2011 08:36:43 GMT]]></title><description><![CDATA[<p>asdfghjkl1234 schrieb:</p>
<blockquote>
<p>Das ist meiner Meinung nach schon das Minimalbeispiel.<br />
Kann mir denn keiner helfen?<br />
Gruß</p>
</blockquote>
<p>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?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095882</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 21 Jul 2011 08:36:43 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Thu, 21 Jul 2011 08:40:17 GMT]]></title><description><![CDATA[<p>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?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095889</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 21 Jul 2011 08:40:17 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Thu, 21 Jul 2011 10:10:49 GMT]]></title><description><![CDATA[<p>Eine .dll unter windows kennt kein &quot;main&quot; als Einsprungspunkt, sondern nur DllMain:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms682583%28v=vs.85%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms682583(v=vs.85).aspx</a><br />
Wobei void main() mir alle Nackenhaare sträuben lässt. Benenn die Funktion sinnvoll.</p>
<p>Ansonsten:<br />
<a href="http://www.shadoware.de/vb/tutorials/cpp_in_vb.html" rel="nofollow">http://www.shadoware.de/vb/tutorials/cpp_in_vb.html</a></p>
<p>Und benutze bitte [ cpp ] tags.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095948</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 21 Jul 2011 10:10:49 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Fri, 29 Jul 2011 14:38:18 GMT]]></title><description><![CDATA[<p>Ich habe es jetzt einmal mit dieser Variante probiert nur leider stürzt VB jetzt immer nach dem Funktionsaufruf ab.</p>
<p>Deklaration</p>
<pre><code class="language-cpp">Declare Function MooreRukovenaDLL Lib &quot;C:\...\MooreRukovenaDLL.dll&quot; Alias &quot;_MooreRukovenaDLL@4&quot; (ByRef p As Double) As Double
</code></pre>
<p>Aufruf</p>
<pre><code class="language-cpp">MooreRukovenaDLL (DQ)
</code></pre>
<p>C++</p>
<pre><code class="language-cpp">extern &quot;C&quot;  __declspec(dllexport)  void WINAPI MooreRukovenaDLL(double*);
</code></pre>
<pre><code class="language-cpp">void WINAPI MooreRukovenaDLL(double* Dq)
{
*DQ = 1;
}
</code></pre>
<p>Habe nur alle möglichen Varianten durch probiert und keine führt zum Ziel.<br />
Ich bin mit meinem Latein am Ende...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099517</guid><dc:creator><![CDATA[asdfghjkl1234]]></dc:creator><pubDate>Fri, 29 Jul 2011 14:38:18 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Fri, 29 Jul 2011 16:37:24 GMT]]></title><description><![CDATA[<p>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.</p>
<p>gruss<br />
Dirk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099589</guid><dc:creator><![CDATA[dbu]]></dc:creator><pubDate>Fri, 29 Jul 2011 16:37:24 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Fri, 29 Jul 2011 19:33:40 GMT]]></title><description><![CDATA[<p>hier noch ein Link:<br />
<a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;106553" rel="nofollow">http://support.microsoft.com/default.aspx?scid=kb;en-us;106553</a><br />
und<br />
<a href="http://www.go4expert.com/forums/showthread.php?t=129" rel="nofollow">http://www.go4expert.com/forums/showthread.php?t=129</a></p>
<p>MfG f.-th.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2099658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2099658</guid><dc:creator><![CDATA[f.-th.]]></dc:creator><pubDate>Fri, 29 Jul 2011 19:33:40 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Mon, 01 Aug 2011 08:32:53 GMT]]></title><description><![CDATA[<p>Ich habe den Fehler jetzt eingegrenzt.</p>
<p>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.</p>
<p>Ich verstehe den Fehler nicht. Könnte es darin liegen, das die beiden Felder zusammengenommen für eine DLL zu groß sind?<br />
Als Exe funktioniert der Code wunderbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2100281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2100281</guid><dc:creator><![CDATA[asdfghjkl1234]]></dc:creator><pubDate>Mon, 01 Aug 2011 08:32:53 GMT</pubDate></item><item><title><![CDATA[Reply to VS C++ DLL in VB einfügen on Mon, 01 Aug 2011 10:38:28 GMT]]></title><description><![CDATA[<p>Excel - DLL - VB oder VBA?<br />
Je nach Version sind die Limits anders.<br />
Hier mal ein Beispiel aus 2006:<br />
<a href="http://www.xlam.ch/xlimits/visualbasic.htm" rel="nofollow">http://www.xlam.ch/xlimits/visualbasic.htm</a></p>
<p>Keine Ahnung ob du damit in Konflikt kommst?<br />
Hier noch so was:<br />
<a href="http://www.xlam.ch/xlimits/arrays.htm" rel="nofollow">http://www.xlam.ch/xlimits/arrays.htm</a></p>
<p>MfG f.-th.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2100333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2100333</guid><dc:creator><![CDATA[f.-th.]]></dc:creator><pubDate>Mon, 01 Aug 2011 10:38:28 GMT</pubDate></item></channel></rss>