Hallo zusammen,
ich habe großes Problem ein Array von ANSI C (Code als DLL) an C# zu übergeben. Ich habe schon vieles versucht aber ohne Erfolg. Ich poste den Code (C und C#) unten, vielleicht kann mir jemand helfen. Ich habe schon Forum durchgeschaut aber nichts passendes gefunden.
Das Problem: > Fehlermeldung:
Der Einstiegspunkt "getBuff1" wurde nicht in der DLL "xyz.dll" gefunden.
unsigned short buf[22];
unsigned short* WINAPI __declspec(dllexport) getBuff1(unsigned char handle)
{
return buf;
}
[DllImport(@"xyz.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr getBuff1(byte handle);
public void funz1()
{
int counter = 1;
unsafe
{
IntPtr arrayValue = IntPtr.Zero;
arrayValue = getBuff1((byte)counter);
}
}
Servus,
die Calling Convention stimmt nicht. WINAPI ist (i.d.R) als Stdcall definiert, nicht Cdecl bentutz StdCall oder besser Winapi, dann bist du auf der sicheren Seite.
Du kannst die Angabe der Calling Convention im DLLImport-Attribut auch weglassen, wenn nichts angegeben ist wird Stdcall verwendet.
Edit:
Kleiner Hinweis:
Der Unsafe Block mach so überhaupt keinen Sinn.
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
Hallo robmir,
davon abgesehen würde ich als Rückgabetyp in der DllImport-Deklaration direkt short []
verwenden.
herbivore
danke an Euch alle. Es klappt nicht so. Ich habe eine andere Lösung, in dem C Modul gebe ich nicht pointer aber unsigned short zurück. So ist es einfacher zu verarbeiten im C#. Der Vorteil ist, dass ich C beliebig anpasse kann, d.h. Wrapper Funktionen schreiben.