<?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[wrapperdatei mit variablen]]></title><description><![CDATA[<p>Hallo !<br />
Ich hab endlich erste Erfolge damit, eine c++ dll so zu wrappen, dass ich sie in c# aufrufen kann.<br />
Leider habe ich dabei übersehen, dass bestimmte Variablen für praktisch alle Funktionen bekannt sein müssen. Gleichzeitig sind die dermaßen groß, dass ich sie nur ungern in c# nachbauen will. Es sollte für c# reichen zu wissen, dass dll-intern 2 Instanzen angelegt sind und ich als Funktionsparameter einen Int als Identifizierer zB cameranum = 1 oder 2 übergebe.</p>
<p>Nur wie ? Normal (c++ zu c++) wäre, dass man ein Programm aufbaut indem die unmanaged Funktionen aufgerufen werden und auch alle Variablen deklariert sind.</p>
<p>Doch hier soll eine wrapper-dll geschrieben werden, die abschließend von c# aus aufgerufen wird, Funktion für Funktion. Wie kann man da Variablen in der zu wrappenden dll GLOBAL bekannt machen??? SO funktionierts schonmal nicht (die CAMDESC-Instanzen müssen bekannt sein. Stürzt ab bei <em>int W_SR_API_StartCameraConnectionManagement(int cameranum)</em>):</p>
<pre><code class="language-cpp">// SR_API_WRAP.h
#define WRAP __declspec(dllexport)
using namespace System;
#include &lt;string&gt;
#include &quot;SR_API.h&quot;
#pragma comment(lib,&quot;SR_API.lib&quot;)
CAMDESC* cd1;
CAMDESC* cd2;
extern &quot;C&quot; 
{ 
	__declspec(dllexport) char* W_SR_API_GetAPIVersion();
	__declspec(dllexport) int W_SR_API_Init();
	__declspec(dllexport) int W_SR_API_Exit();
	__declspec(dllexport) int W_SR_API_StartCameraConnectionManagement(int cameranum);
	__declspec(dllexport) int W_SR_API_StopCameraConnectionManagement (int cameranum);
}
</code></pre>
<pre><code class="language-cpp">#include &quot;StdAfx.h&quot;
#include &quot;SR_API_WRAP.h&quot;
#include &lt;string&gt;

// Dies ist die Haupt-DLL.
int __cdecl W_StatusMessage(STATUS_MSG_ARGLST)
{ 
	int zeigedat;
	char one;
	std::string strtest;
	char* zeigemesg=&quot;     &quot;;
	int strlength=0;
    //Was möchtest du machen? Ich vermute stark, diese Funktion ist ein Eventhandler,
	//und du kannst so auf Ereignisse reagieren ... 
	zeigedat=msgType;
	zeigedat=msgdata1;
	zeigedat=msgdata2;
	if( msg!=NULL)
	{
		one = *msg;
		while (one != NULL)
		{
			strtest = strtest+one;
			msg++;
			strlength++;
			one = *msg;
		}
		msg=msg-strlength;
	}
	else strtest = &quot;Nullpointer&quot;;
    return 0; 
}
extern &quot;C&quot; 
{ 
    __declspec(dllexport) char* W_SR_API_GetAPIVersion()
    {
		char* version;
		//string ver_str;
		version = SR_API_GetAPIVersion();
		//ver_str = version;
		return version;
    } 
	__declspec(dllexport) int W_SR_API_Init()
	{
		cd1 = new CAMDESC;
		cd2 = new CAMDESC;
		return SR_API_Init(W_StatusMessage);
	}
	__declspec(dllexport) int W_SR_API_Exit()
	{
		return SR_API_Exit();
	}
	__declspec(dllexport) int W_SR_API_StartCameraConnectionManagement(int cameranum)
	{
		if( cameranum ==1 || cameranum==2)
		{
			if (cameranum == 1) return SR_API_StartCameraConnectionManagement(cd1);
			if (cameranum == 2) return SR_API_StartCameraConnectionManagement(cd2);
		}
		else
		{
			return 999;
		}

	}
	__declspec(dllexport) int W_SR_API_StopCameraConnectionManagement (int cameranum)
	{
		if( cameranum ==1 || cameranum==2)
		{
			if (cameranum == 1) return SR_API_StopCameraConnectionManagement (cd1);
			if (cameranum == 2) return SR_API_StopCameraConnectionManagement (cd2);
		}
		else
		{
			return 999;
		}
	}

}
</code></pre>
<p>KEINER DA?? *heul*</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284634/wrapperdatei-mit-variablen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 23:17:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284634.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Apr 2011 11:08:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to wrapperdatei mit variablen on Wed, 06 Apr 2011 13:16:33 GMT]]></title><description><![CDATA[<p>Hallo !<br />
Ich hab endlich erste Erfolge damit, eine c++ dll so zu wrappen, dass ich sie in c# aufrufen kann.<br />
Leider habe ich dabei übersehen, dass bestimmte Variablen für praktisch alle Funktionen bekannt sein müssen. Gleichzeitig sind die dermaßen groß, dass ich sie nur ungern in c# nachbauen will. Es sollte für c# reichen zu wissen, dass dll-intern 2 Instanzen angelegt sind und ich als Funktionsparameter einen Int als Identifizierer zB cameranum = 1 oder 2 übergebe.</p>
<p>Nur wie ? Normal (c++ zu c++) wäre, dass man ein Programm aufbaut indem die unmanaged Funktionen aufgerufen werden und auch alle Variablen deklariert sind.</p>
<p>Doch hier soll eine wrapper-dll geschrieben werden, die abschließend von c# aus aufgerufen wird, Funktion für Funktion. Wie kann man da Variablen in der zu wrappenden dll GLOBAL bekannt machen??? SO funktionierts schonmal nicht (die CAMDESC-Instanzen müssen bekannt sein. Stürzt ab bei <em>int W_SR_API_StartCameraConnectionManagement(int cameranum)</em>):</p>
<pre><code class="language-cpp">// SR_API_WRAP.h
#define WRAP __declspec(dllexport)
using namespace System;
#include &lt;string&gt;
#include &quot;SR_API.h&quot;
#pragma comment(lib,&quot;SR_API.lib&quot;)
CAMDESC* cd1;
CAMDESC* cd2;
extern &quot;C&quot; 
{ 
	__declspec(dllexport) char* W_SR_API_GetAPIVersion();
	__declspec(dllexport) int W_SR_API_Init();
	__declspec(dllexport) int W_SR_API_Exit();
	__declspec(dllexport) int W_SR_API_StartCameraConnectionManagement(int cameranum);
	__declspec(dllexport) int W_SR_API_StopCameraConnectionManagement (int cameranum);
}
</code></pre>
<pre><code class="language-cpp">#include &quot;StdAfx.h&quot;
#include &quot;SR_API_WRAP.h&quot;
#include &lt;string&gt;

// Dies ist die Haupt-DLL.
int __cdecl W_StatusMessage(STATUS_MSG_ARGLST)
{ 
	int zeigedat;
	char one;
	std::string strtest;
	char* zeigemesg=&quot;     &quot;;
	int strlength=0;
    //Was möchtest du machen? Ich vermute stark, diese Funktion ist ein Eventhandler,
	//und du kannst so auf Ereignisse reagieren ... 
	zeigedat=msgType;
	zeigedat=msgdata1;
	zeigedat=msgdata2;
	if( msg!=NULL)
	{
		one = *msg;
		while (one != NULL)
		{
			strtest = strtest+one;
			msg++;
			strlength++;
			one = *msg;
		}
		msg=msg-strlength;
	}
	else strtest = &quot;Nullpointer&quot;;
    return 0; 
}
extern &quot;C&quot; 
{ 
    __declspec(dllexport) char* W_SR_API_GetAPIVersion()
    {
		char* version;
		//string ver_str;
		version = SR_API_GetAPIVersion();
		//ver_str = version;
		return version;
    } 
	__declspec(dllexport) int W_SR_API_Init()
	{
		cd1 = new CAMDESC;
		cd2 = new CAMDESC;
		return SR_API_Init(W_StatusMessage);
	}
	__declspec(dllexport) int W_SR_API_Exit()
	{
		return SR_API_Exit();
	}
	__declspec(dllexport) int W_SR_API_StartCameraConnectionManagement(int cameranum)
	{
		if( cameranum ==1 || cameranum==2)
		{
			if (cameranum == 1) return SR_API_StartCameraConnectionManagement(cd1);
			if (cameranum == 2) return SR_API_StartCameraConnectionManagement(cd2);
		}
		else
		{
			return 999;
		}

	}
	__declspec(dllexport) int W_SR_API_StopCameraConnectionManagement (int cameranum)
	{
		if( cameranum ==1 || cameranum==2)
		{
			if (cameranum == 1) return SR_API_StopCameraConnectionManagement (cd1);
			if (cameranum == 2) return SR_API_StopCameraConnectionManagement (cd2);
		}
		else
		{
			return 999;
		}
	}

}
</code></pre>
<p>KEINER DA?? *heul*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044892</guid><dc:creator><![CDATA[ghostwhisperer]]></dc:creator><pubDate>Wed, 06 Apr 2011 13:16:33 GMT</pubDate></item></channel></rss>