Guten Tag liebe Freunde,
wir haben ein Modul, dass wir in unserem Programm einfügen wollen. Die Verbindung zum API steht. Dieser versucht dann auf den angegebenen Pfad zuzugreifen, aber da kommt dauernd eine Fehlermeldung, dass er das Dokument nicht findet.
Wir benutzen Visual Studio 2017
.NET Framework 4.7.1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApp64
{
public partial class Form1 : Form
{
[DllImport("bkz_unp.dll" , CharSet = CharSet.Unicode)]
//public static extern int unpack_bkz(string a, string b);
public static extern int unpack_bkz(char[] a, char[] b);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
string sentence = "C:\\Cemal\\hoop.kpr";
var charArr = sentence.ToCharArray();
foreach (char ch in charArr)
{
// MessageBox.Show(ch.ToString());
}
sentence = "C:\\Cemal\\Caglar.txt";
var charArr2 = sentence.ToCharArray();
//string aa = @"C:\Cemal\bkz_2004.kpr";
//string bb = @"C:\Cemal\caglar.txt";
int aaaa = unpack_bkz(charArr, charArr2);
}
}
}
Im ANhang stehen die Anforderungen
ich kriege die Rückmeldung 3, dies bedeutet, dass er nicht auf bkz_2004.kpr zugreifen kann. Ist meine Pfadangabe falsch?
ich kriege die Rückmeldung 3, dies bedeutet, dass er nicht auf bkz_2004.kpr zugreifen kann. Ist meine Pfadangabe falsch?
Was soll "Rückmeldung 3" sein? Wie lautet die genaue Fehlermeldung und in welcher Zeile tritt sie auf? Was sagt die Beschreibung/Dokumentation der API zu dem Problem?
Dein PInvoke ist völlig falsch.
Das Äquivalent von einem Char Pointer ist kein Char-Array sondern ein String.
Also das, was auskommentiert ist.
Vermutlich brauchst Du auch ein MarshalAs
, außer Du hast wirklich ein COM Style String was ich bezweifle.
Siehe dazu Default Marshaling for Strings und Marshaling Data with Platform Invoke
PS: bitte nächstes Mal den richtigen Forenbereich wählen. Danke.
[Hinweis] Wie poste ich richtig?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Vielen Dank für die so schnelle Antwort vom Team. Okay kommt nicht mehr vor. Ich bitte um Nachsicht weil ich recht neu bin und freue mich von euch was lernen zu können.
Info zu pinvoke für andere Interessenten:
https://docs.microsoft.com/de-de/cpp/dotnet/how-to-call-native-dlls-from-managed-code-using-pinvoke?view=vs-2019
Alles gut, war soweit nur ein Hinweis.
Wäre noch gut, wenn Du die Lösung postest. 👍
Ich persönlich versteh auch den Hinweis auf die Docs nicht, wo da die Lösung sein soll - aber ich versteh auch nicht alles 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code