<?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[Probleme mit der Übergabe von Array-Zeigern an Funktionen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe Probleme mit der Übergabe von Array-Zeigern an Funktionen. Die Funktion &quot;mtest&quot; soll mit Zeigern zu Arrays aufgerufen werden. Sie soll die DLL-Funktion &quot;GPxi3051_GetDriverInfo&quot; mit der Struktur &quot;StructDriverInfo&quot; aufrufen und den Inhalt auf die Arrays zurückgeben. Diese Funktion soll später in eine DLL exportiert werden und einem älterem Prüfprogramm, welches nicht mit Strukturen umgehen kann, als Übersetzer dienen. Irgendetwas habe ich mit Arrays und Zeigern darauf noch nicht verstanden. Aber hier erst einmal der Code von &quot;tcan.cpp&quot;:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;GPxi3051w.h&quot;
#pragma comment(lib,&quot;GPxi3051w.lib&quot;)

int main(int argc, char* argv[])
{
	int           errornr          = 0;
	unsigned long Version          = 0;
	unsigned long DevCount         = 0;
	unsigned long SW_XILINX[12]    = {0,0,0,0,0,0,0,0,0,0,0,0};
	unsigned long GeoAddress[12]   = {0,0,0,0,0,0,0,0,0,0,0,0};
	unsigned long SerialNumber[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
	unsigned long Revision[12]     = {0,0,0,0,0,0,0,0,0,0,0,0};

	int mtest(unsigned long *Version,
		      unsigned long *DevCount,
		      unsigned long *SW_XILINX[],
			  unsigned long *GeoAddress[],
			  unsigned long *SerialNumber[],
			  unsigned long *Revision[]);
	errornr = mtest(&amp;Version,
					&amp;DevCount,
				 	&amp;SW_XILINX,
					&amp;GeoAddress,
					&amp;SerialNumber,
					&amp;Revision);
    return TRUE;
}

//extern &quot;C&quot; __declspec(dllexport) 
int mtest(unsigned long *Version,
		  unsigned long *DevCount,
		  unsigned long *SW_XILINX[],
		  unsigned long *GeoAddress[],
		  unsigned long *SerialNumber[],
		  unsigned long *Revision[])
{
	int errornr=0;
	GPxi3051_StructDriverInfo StructDriverInfo;

	errornr       = GPxi3051_GetDriverInfo(&amp;StructDriverInfo);

	*Version      = StructDriverInfo.Version;
    *DevCount     = StructDriverInfo.DevCount;
	*SW_XILINX    = StructDriverInfo.SW_XILINX;
	*GeoAddress   = StructDriverInfo.GeoAddress;
	*SerialNumber = StructDriverInfo.SerialNumber;
	*Revision     = StructDriverInfo.Revision;
    return errornr;
}
</code></pre>
<p>Und das Header-File &quot;GPxi3051w.h&quot;:</p>
<pre><code class="language-cpp">/*------------------------------------------------------------------*/
/* Defines                                                          */					
/*------------------------------------------------------------------*/
#define DEV_MAX                   12

/*------------------------------------------------------------------*/
/* Typedefs															*/					
/*------------------------------------------------------------------*/
typedef struct
  {
  unsigned long Version;
  unsigned long DevCount;
  unsigned long SW_XILINX[DEV_MAX];
  unsigned long GeoAddress[DEV_MAX];
  unsigned long SerialNumber[DEV_MAX];
  unsigned long Revision[DEV_MAX];
  } GPxi3051_StructDriverInfo;
/*------------------------------------------------------------------*/
typedef struct
  {
  unsigned long Version;
  unsigned long DevCount;
  unsigned long SW_XILINX;
  unsigned long GeoAddress;
  unsigned long SerialNumber;
  unsigned long Revision;
  } GPxi3051_StructDriverInfo2;

/*------------------------------------------------------------------*/
/* Functions														*/					
/*------------------------------------------------------------------*/

#define DllImport extern &quot;C&quot; __declspec( dllimport )

DllImport int GPxi3051_DLL_Version(unsigned long *pVersion);
DllImport int GPxi3051_DpramReadMonitor(unsigned long card, unsigned long port,void *data, unsigned long *length);
DllImport int GPxi3051_DpramReadResponse(unsigned long card, unsigned long port, unsigned char data[], unsigned long *length);
DllImport int GPxi3051_DpramWriteInstruction(unsigned char data[], unsigned long length);
DllImport int GPxi3051_GetDriverInfo(GPxi3051_StructDriverInfo *pDriverInfo);
DllImport int GPxi3051_ResetPort(unsigned long card, unsigned long port);
DllImport int GPxi3051_XilinxDownload(unsigned long card, char *pFileName);
DllImport int GPxi3051_XilinxWriteData(unsigned char data[], unsigned long length);
</code></pre>
<p>Und die Fehlermeldung</p>
<pre><code>Temporäre Dateien und Ausgabedateien für &quot;tcan - Win32 Debug&quot; werden gelöscht.
--------------------Konfiguration: tcan - Win32 Debug--------------------
Kompilierung läuft...
StdAfx.cpp
tcan.cpp
D:\Users\Pierre\Eigene Dateien\Visual C\tcan\tcan.cpp(26) : error C2664: 'mtest' : Konvertierung des Parameters 3 von 'unsigned long (*)[12]' in 'unsigned long *[]' nicht moeglich
        Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
Fehler beim Ausführen von cl.exe.

tcan.exe - 1 Fehler, 0 Warnung(en)
</code></pre>
<p>Bitte helft mir.</p>
<p>Mit freundlichen Grüßen</p>
<p>PierreOne</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161298/probleme-mit-der-übergabe-von-array-zeigern-an-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 19:58:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161298.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Oct 2006 10:25:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit der Übergabe von Array-Zeigern an Funktionen on Thu, 05 Oct 2006 10:25:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe Probleme mit der Übergabe von Array-Zeigern an Funktionen. Die Funktion &quot;mtest&quot; soll mit Zeigern zu Arrays aufgerufen werden. Sie soll die DLL-Funktion &quot;GPxi3051_GetDriverInfo&quot; mit der Struktur &quot;StructDriverInfo&quot; aufrufen und den Inhalt auf die Arrays zurückgeben. Diese Funktion soll später in eine DLL exportiert werden und einem älterem Prüfprogramm, welches nicht mit Strukturen umgehen kann, als Übersetzer dienen. Irgendetwas habe ich mit Arrays und Zeigern darauf noch nicht verstanden. Aber hier erst einmal der Code von &quot;tcan.cpp&quot;:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;GPxi3051w.h&quot;
#pragma comment(lib,&quot;GPxi3051w.lib&quot;)

int main(int argc, char* argv[])
{
	int           errornr          = 0;
	unsigned long Version          = 0;
	unsigned long DevCount         = 0;
	unsigned long SW_XILINX[12]    = {0,0,0,0,0,0,0,0,0,0,0,0};
	unsigned long GeoAddress[12]   = {0,0,0,0,0,0,0,0,0,0,0,0};
	unsigned long SerialNumber[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
	unsigned long Revision[12]     = {0,0,0,0,0,0,0,0,0,0,0,0};

	int mtest(unsigned long *Version,
		      unsigned long *DevCount,
		      unsigned long *SW_XILINX[],
			  unsigned long *GeoAddress[],
			  unsigned long *SerialNumber[],
			  unsigned long *Revision[]);
	errornr = mtest(&amp;Version,
					&amp;DevCount,
				 	&amp;SW_XILINX,
					&amp;GeoAddress,
					&amp;SerialNumber,
					&amp;Revision);
    return TRUE;
}

//extern &quot;C&quot; __declspec(dllexport) 
int mtest(unsigned long *Version,
		  unsigned long *DevCount,
		  unsigned long *SW_XILINX[],
		  unsigned long *GeoAddress[],
		  unsigned long *SerialNumber[],
		  unsigned long *Revision[])
{
	int errornr=0;
	GPxi3051_StructDriverInfo StructDriverInfo;

	errornr       = GPxi3051_GetDriverInfo(&amp;StructDriverInfo);

	*Version      = StructDriverInfo.Version;
    *DevCount     = StructDriverInfo.DevCount;
	*SW_XILINX    = StructDriverInfo.SW_XILINX;
	*GeoAddress   = StructDriverInfo.GeoAddress;
	*SerialNumber = StructDriverInfo.SerialNumber;
	*Revision     = StructDriverInfo.Revision;
    return errornr;
}
</code></pre>
<p>Und das Header-File &quot;GPxi3051w.h&quot;:</p>
<pre><code class="language-cpp">/*------------------------------------------------------------------*/
/* Defines                                                          */					
/*------------------------------------------------------------------*/
#define DEV_MAX                   12

/*------------------------------------------------------------------*/
/* Typedefs															*/					
/*------------------------------------------------------------------*/
typedef struct
  {
  unsigned long Version;
  unsigned long DevCount;
  unsigned long SW_XILINX[DEV_MAX];
  unsigned long GeoAddress[DEV_MAX];
  unsigned long SerialNumber[DEV_MAX];
  unsigned long Revision[DEV_MAX];
  } GPxi3051_StructDriverInfo;
/*------------------------------------------------------------------*/
typedef struct
  {
  unsigned long Version;
  unsigned long DevCount;
  unsigned long SW_XILINX;
  unsigned long GeoAddress;
  unsigned long SerialNumber;
  unsigned long Revision;
  } GPxi3051_StructDriverInfo2;

/*------------------------------------------------------------------*/
/* Functions														*/					
/*------------------------------------------------------------------*/

#define DllImport extern &quot;C&quot; __declspec( dllimport )

DllImport int GPxi3051_DLL_Version(unsigned long *pVersion);
DllImport int GPxi3051_DpramReadMonitor(unsigned long card, unsigned long port,void *data, unsigned long *length);
DllImport int GPxi3051_DpramReadResponse(unsigned long card, unsigned long port, unsigned char data[], unsigned long *length);
DllImport int GPxi3051_DpramWriteInstruction(unsigned char data[], unsigned long length);
DllImport int GPxi3051_GetDriverInfo(GPxi3051_StructDriverInfo *pDriverInfo);
DllImport int GPxi3051_ResetPort(unsigned long card, unsigned long port);
DllImport int GPxi3051_XilinxDownload(unsigned long card, char *pFileName);
DllImport int GPxi3051_XilinxWriteData(unsigned char data[], unsigned long length);
</code></pre>
<p>Und die Fehlermeldung</p>
<pre><code>Temporäre Dateien und Ausgabedateien für &quot;tcan - Win32 Debug&quot; werden gelöscht.
--------------------Konfiguration: tcan - Win32 Debug--------------------
Kompilierung läuft...
StdAfx.cpp
tcan.cpp
D:\Users\Pierre\Eigene Dateien\Visual C\tcan\tcan.cpp(26) : error C2664: 'mtest' : Konvertierung des Parameters 3 von 'unsigned long (*)[12]' in 'unsigned long *[]' nicht moeglich
        Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
Fehler beim Ausführen von cl.exe.

tcan.exe - 1 Fehler, 0 Warnung(en)
</code></pre>
<p>Bitte helft mir.</p>
<p>Mit freundlichen Grüßen</p>
<p>PierreOne</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149798</guid><dc:creator><![CDATA[PierreOne]]></dc:creator><pubDate>Thu, 05 Oct 2006 10:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Übergabe von Array-Zeigern an Funktionen on Thu, 05 Oct 2006 11:00:47 GMT]]></title><description><![CDATA[<p>Mach ein typedef. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149825</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Thu, 05 Oct 2006 11:00:47 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Übergabe von Array-Zeigern an Funktionen on Thu, 05 Oct 2006 11:01:20 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=9713" rel="nofollow">estartu</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=1" rel="nofollow">MFC (Visual C++)</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149826</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 05 Oct 2006 11:01:20 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Übergabe von Array-Zeigern an Funktionen on Thu, 05 Oct 2006 12:16:54 GMT]]></title><description><![CDATA[<p>Das sind alles eindimensionale Arrays, typedef's brauchste dafür nicht.</p>
<pre><code class="language-cpp">unsigned long SW_XILINX[12]    = {0,0,0,0,0,0,0,0,0,0,0,0};
unsigned long* arrPtr = SW_XILINX;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1149877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149877</guid><dc:creator><![CDATA[gerie]]></dc:creator><pubDate>Thu, 05 Oct 2006 12:16:54 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Übergabe von Array-Zeigern an Funktionen on Thu, 05 Oct 2006 12:17:27 GMT]]></title><description><![CDATA[<p>Wenn ich micht richtig entsinne ist ArrayXYZ[] schon ein Zeiger und muss nicht mit * voran definiert werden.</p>
<p>gruss<br />
Marcus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149879</guid><dc:creator><![CDATA[UserMarcus]]></dc:creator><pubDate>Thu, 05 Oct 2006 12:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit der Übergabe von Array-Zeigern an Funktionen on Thu, 05 Oct 2006 12:26:38 GMT]]></title><description><![CDATA[<p>UserMarcus schrieb:</p>
<blockquote>
<p>Wenn ich micht richtig entsinne ist ArrayXYZ[] schon ein Zeiger und muss nicht mit * voran definiert werden.</p>
</blockquote>
<p>Richtig!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149891</guid><dc:creator><![CDATA[gerie]]></dc:creator><pubDate>Thu, 05 Oct 2006 12:26:38 GMT</pubDate></item></channel></rss>