<?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[Funktionen einer DLL, bitte helft mir !]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe hier ein riesen Problem. Ich habe eine DLL(native) bekommen,<br />
die eine Maschine ansteuert per USB<br />
Ein Codebeispiel wie die Funktionen der DLL aussehen, gibts auch aber ich werde einfach nicht schlau daraus.<br />
Mit C++ kenne ich mich nicht wirklich aus, ich muss es schaffen die Funktionen aus einer <a href="http://VB.Net" rel="nofollow">VB.Net</a> Anwendung &quot;anzusteuern&quot;.</p>
<p>Die DLL bietet 4 Funktionen, von denen 2 offenbar die wichtigen sind.<br />
Es geht darum den Inhalt einer Textdatei(mit Koordinaten) an die Maschine zu übergeben. Offenbar ist der Pufferspeicher für die Daten klein, so daß die Daten, wenn ich das richtig verstanden habe stückweise &quot;auf Anfrage&quot; an die Maschine übergeben werden.<br />
Hier zunächst die Funktionen und die Beispiele wie die Funktionen Readdata und Writedata in C++ aussehen :</p>
<pre><code>Function Name: ReadData

Desc: Read data in from cutter for Ready information
Params: 
inBuf		In		the begining address of the data buffer
nInSize 	In		the length of data
Return: return RT_SUCCEEDED if operation succeeded;
		return RT_FAILED if operation failed and we will abort cutting;
		return RT_RETRY if operaion failed, and it is recoverable. we need to recall the function.
*********************************************************************/
 _declspec(dllexport) int _stdcall ReadData(char* inBuf, int nInSize);
</code></pre>
<pre><code>_declspec(dllexport) int  _stdcall WriteData(char* outBuf, int nOutSize);
</code></pre>
<p>Das Beispiel in C++ sieht wie folgt aus :</p>
<pre><code>extern void SendData(/*CString data*/char *pline)		//·¢ËÍÖ¸Áî
{
	char sendf;
//	int count,
	int rein=0,reout=0;
	int max=20000;

 	tagCutterParameters sets;

 sets.force = '200';

	SendCutterSetting(sets,NULL);

	//count=data.GetLength();

//	AfxMessageBox(data);
	while(max--)
	{	
		rein=ReadData(&amp;sendf,sizeof(char));
		if (rein==01 &amp;&amp; sendf=='E')
		{
			reout=WriteData(pline,strlen(pline));
			if (reout!=01)
			{
				AfxMessageBox(&quot;Command Send Faild!&quot;,MB_ICONSTOP);
			}

			break;
		}
	}
	if (max==0)
	{
		AfxMessageBox(&quot;USB Port Overtime!&quot;,MB_ICONSTOP);
		CloseUSBDevice(NULL);
	}
}
</code></pre>
<p>Ich habe das so verstanden, daß bei</p>
<pre><code>rein=ReadData(&amp;sendf,sizeof(char));
</code></pre>
<p>die Maschine auf &quot;ready für neue Daten in den Puffer&quot; abgefragt wird, allerdings ist mir das mit &amp;sendf nicht klar. Oben wurde sendf als char deklariert, was ist das nun mit dem &quot;&amp;&quot; davor ? Die Funktion gibt doch den Rückgabewert nur in &quot;rein&quot; oder nicht ?<br />
Wieso kann sendf später &quot;E&quot; sein ?</p>
<p>Den ersten Schwung Daten nimmt die Maschine an, die Funktion gibt 1 als Rückgabe für &quot;rein&quot;, danach ist Schluss.</p>
<p>Ich würde mich riesig freuen wenn jemand Licht in das Dunkel bringen könnte,<br />
ich raufe mir die Haare</p>
<p>Lieben Gruß<br />
Dennis</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/267011/funktionen-einer-dll-bitte-helft-mir</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 15:48:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/267011.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 May 2010 00:05:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionen einer DLL, bitte helft mir ! on Tue, 18 May 2010 00:07:22 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe hier ein riesen Problem. Ich habe eine DLL(native) bekommen,<br />
die eine Maschine ansteuert per USB<br />
Ein Codebeispiel wie die Funktionen der DLL aussehen, gibts auch aber ich werde einfach nicht schlau daraus.<br />
Mit C++ kenne ich mich nicht wirklich aus, ich muss es schaffen die Funktionen aus einer <a href="http://VB.Net" rel="nofollow">VB.Net</a> Anwendung &quot;anzusteuern&quot;.</p>
<p>Die DLL bietet 4 Funktionen, von denen 2 offenbar die wichtigen sind.<br />
Es geht darum den Inhalt einer Textdatei(mit Koordinaten) an die Maschine zu übergeben. Offenbar ist der Pufferspeicher für die Daten klein, so daß die Daten, wenn ich das richtig verstanden habe stückweise &quot;auf Anfrage&quot; an die Maschine übergeben werden.<br />
Hier zunächst die Funktionen und die Beispiele wie die Funktionen Readdata und Writedata in C++ aussehen :</p>
<pre><code>Function Name: ReadData

Desc: Read data in from cutter for Ready information
Params: 
inBuf		In		the begining address of the data buffer
nInSize 	In		the length of data
Return: return RT_SUCCEEDED if operation succeeded;
		return RT_FAILED if operation failed and we will abort cutting;
		return RT_RETRY if operaion failed, and it is recoverable. we need to recall the function.
*********************************************************************/
 _declspec(dllexport) int _stdcall ReadData(char* inBuf, int nInSize);
</code></pre>
<pre><code>_declspec(dllexport) int  _stdcall WriteData(char* outBuf, int nOutSize);
</code></pre>
<p>Das Beispiel in C++ sieht wie folgt aus :</p>
<pre><code>extern void SendData(/*CString data*/char *pline)		//·¢ËÍÖ¸Áî
{
	char sendf;
//	int count,
	int rein=0,reout=0;
	int max=20000;

 	tagCutterParameters sets;

 sets.force = '200';

	SendCutterSetting(sets,NULL);

	//count=data.GetLength();

//	AfxMessageBox(data);
	while(max--)
	{	
		rein=ReadData(&amp;sendf,sizeof(char));
		if (rein==01 &amp;&amp; sendf=='E')
		{
			reout=WriteData(pline,strlen(pline));
			if (reout!=01)
			{
				AfxMessageBox(&quot;Command Send Faild!&quot;,MB_ICONSTOP);
			}

			break;
		}
	}
	if (max==0)
	{
		AfxMessageBox(&quot;USB Port Overtime!&quot;,MB_ICONSTOP);
		CloseUSBDevice(NULL);
	}
}
</code></pre>
<p>Ich habe das so verstanden, daß bei</p>
<pre><code>rein=ReadData(&amp;sendf,sizeof(char));
</code></pre>
<p>die Maschine auf &quot;ready für neue Daten in den Puffer&quot; abgefragt wird, allerdings ist mir das mit &amp;sendf nicht klar. Oben wurde sendf als char deklariert, was ist das nun mit dem &quot;&amp;&quot; davor ? Die Funktion gibt doch den Rückgabewert nur in &quot;rein&quot; oder nicht ?<br />
Wieso kann sendf später &quot;E&quot; sein ?</p>
<p>Den ersten Schwung Daten nimmt die Maschine an, die Funktion gibt 1 als Rückgabe für &quot;rein&quot;, danach ist Schluss.</p>
<p>Ich würde mich riesig freuen wenn jemand Licht in das Dunkel bringen könnte,<br />
ich raufe mir die Haare</p>
<p>Lieben Gruß<br />
Dennis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1898715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898715</guid><dc:creator><![CDATA[memorable]]></dc:creator><pubDate>Tue, 18 May 2010 00:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen einer DLL, bitte helft mir ! on Tue, 18 May 2010 00:45:12 GMT]]></title><description><![CDATA[<p>Also ich versuche mal zu helfen<br />
1. bitte benutz</p>
<pre><code class="language-cpp">-Tag und nicht [code ] (Editierfunktion nutzen  :) )
2. Im Beispiel sind die Namen der Variablen, meiner Meinung nach, schlecht gewählt.
[cpp]int rein=0,reout=0;
</code></pre>
<p>Die Beiden Ints werden zur Kontrolle genutzt, ob überhaupt gelesen/geschrieben wird. rein wird vermutlich aus <strong>Re</strong>turn<strong>In</strong>put zusammengesetzt.<br />
und wie du in der Doku siehst, ist der Return-Wert kein &quot;Datensatz&quot; sondern nur Kontroll-Flags.</p>
<pre><code class="language-cpp">Return: return RT_SUCCEEDED if operation succeeded;
        return RT_FAILED if operation failed and we will abort cutting;
        return RT_RETRY if operaion failed, and it is recoverable. we need to recall the function.
</code></pre>
<p>zu deiner Frage wegen <strong>&amp;sendf</strong>:<br />
&amp; bedeutet, dass die Referenz der Variable übergeben wird. Also die Adresse (-&gt; siehe Google Pointer + Referenzen)</p>
<p>ReadData(char* inBuf, int nInSize); liesst also Soviele Bytes wie &quot;nInSize&quot; gross ist, in den Buffer inBuf. return wird nur als Kontrolle genutzt ob wirklich etwas gelesen wurde etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1898720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898720</guid><dc:creator><![CDATA[BigNeal]]></dc:creator><pubDate>Tue, 18 May 2010 00:45:12 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen einer DLL, bitte helft mir ! on Tue, 18 May 2010 00:59:13 GMT]]></title><description><![CDATA[<p>Hallo !</p>
<p>Vielen Dank für deine schnelle Antwort.<br />
Das rein und reout kontrollflags sind, hab ich schon verstanden.</p>
<p>Nur ist sendf ja wenn die funktion rein ausgeführt wird &quot;leer&quot;, gerade erst initialisiert, die Funktion soll ja prüfen ob die Maschine ready ist.<br />
Woher soll denn später sendf den Inhalt 'E&quot; bekommen haben ?</p>
<p>Lg<br />
Dennis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1898722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898722</guid><dc:creator><![CDATA[memorable]]></dc:creator><pubDate>Tue, 18 May 2010 00:59:13 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen einer DLL, bitte helft mir ! on Tue, 18 May 2010 01:22:59 GMT]]></title><description><![CDATA[<p>Ich verstehe gerade nicht genau, was du meinst (spät und so).. ich versuche es mal so, und kommentier dir mal dein Beispiel etwas</p>
<pre><code class="language-cpp">while(max--)                                // Schlaufe für Maximale Versuche den Status 'E' zu bekommen 
    {   
        rein=ReadData(&amp;sendf,sizeof(char));     // 1 Byte lesen und in sendf schreiben
        if (rein==01 &amp;&amp; sendf=='E')             // lesen erfolgreich und Empfangenes char = 'E'
                                                // Vermutlich ist das die Abfrage ob die Maschine bereit ist um Daten zu empfangen
        {
            reout=WriteData(pline,strlen(pline));  // Kompletter String pline schreiben 
            if (reout!=01)                      // Falls Schreiben nicht erfolgreich
            {
                AfxMessageBox(&quot;Command Send Faild!&quot;,MB_ICONSTOP);
            }

            break;                             // ende der while-schlaufe
        }
    }
    if (max==0)                                // falls die while-schlaufe komplett durchgelaufen ist ohne einmal ins &quot;break&quot; zu kkommen, USB-Device schliessen
    {
        AfxMessageBox(&quot;USB Port Overtime!&quot;,MB_ICONSTOP);
        CloseUSBDevice(NULL);
    }
</code></pre>
<p>evtl hilft dir das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1898723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1898723</guid><dc:creator><![CDATA[BigNeal]]></dc:creator><pubDate>Tue, 18 May 2010 01:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen einer DLL, bitte helft mir ! on Tue, 18 May 2010 22:19:07 GMT]]></title><description><![CDATA[<p>Vielen Dank !</p>
<p>Jetzt hab ichs kapiert ^^.<br />
Mein Problem war, das ich nicht begriffen habe, dass</p>
<pre><code class="language-cpp">rein=ReadData(&amp;sendf,sizeof(char));
</code></pre>
<p>tatsächlich in sendf schreibt, ich hatte angenonmmen, daß<br />
die Funktion nur etwas in rein zurückgibt, nicht lachen bitte, wie gesagt<br />
von C++ versteht ich nix.</p>
<p>Dummerweise hab ich die Funktion in <a href="http://VB.net" rel="nofollow">VB.net</a> versucht nachzustricken und<br />
hatte sendf als string deklariert, woraufhin ich auch keine Rückgabe in den String bekommen habe,<br />
Hab dann das ganze als Byte deklariert und dann über System.Text.ASCIIEncoding()<br />
doch tatsächlich mein &quot;E&quot; bekommen.</p>
<p>Allerdings hab ich jetzt das nöchste Problem, ich glaube die Maschine erwartet eine bestimmte Menge Daten, meine eine exakte Größe der Daten für den Puffer, den ersten Schwung Daten nimmt sie an, und danach hängt sich der Thread komplett weg und nix geht mehr, kein zweites &quot;E&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /><br />
Da muss ich glaub ich noch ein bisschen probieren woran es liegt.</p>
<p>Vielen herzlichen Dank auf jeden Fall erst mal.</p>
<p>Lieben Gruß<br />
Dennis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1899306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1899306</guid><dc:creator><![CDATA[memorable]]></dc:creator><pubDate>Tue, 18 May 2010 22:19:07 GMT</pubDate></item></channel></rss>