Laden...

Wie mittels P/Invoke von externer DLL auf Pfad zugreifen?

Erstellt von cagli vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.065 Views
C
cagli Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren
Wie mittels P/Invoke von externer DLL auf Pfad zugreifen?

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?

H
523 Beiträge seit 2008
vor 3 Jahren

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?

C
cagli Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

habe ich gerade beigefügt 😃

16.806 Beiträge seit 2008
vor 3 Jahren

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?

C
cagli Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

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

16.806 Beiträge seit 2008
vor 3 Jahren

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 😉