Использование jna в Java для использования функций С# из dll [дубликат]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Использование jna в Java для использования функций С# из dll [дубликат]

Сообщение Anonymous »

Это основной код Java, из которого я вызываю функции csharp.

Код: Выделить всё

import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.WString;

public class Main {

public interface JNITestInterface extends StdCallLibrary {
JNITestInterface inst = (JNITestInterface) Native.load("C:\\Users\\Rajan Dhiman\\Desktop\\Projects\\StringProc1.dll", JNITestInterface.class);
WString ProcessString(WString input);
}

public static void main(String[] args) {

WString inp = new WString("Rajan");
WString output = JNITestInterface.inst.ProcessString(inp);
System.out.println("The answer we get in Java -> " + output.toString());

}

}
Это два файла ниже, которые взаимодействуют друг с другом, чтобы получить обработанный результат, когда я вызываю функцию (Process String) из класса StringProc1.
Код файла StringProc1: -

Код: Выделить всё

using System;
using System.Runtime.InteropServices;
using StringProc2;

namespace StringProc1
{
public class StringProcessor
{
[DllExport("ProcessString", CallingConvention = CallingConvention.StdCall)\]
public static string ProcessString(string input)
{
string processedString = input.ToUpper();
Console.WriteLine($"Step 1 - Uppercase: {processedString}");

processedString = StringModifier.ModifyString(processedString);
Console.WriteLine($"Step 3 - Reversed: {processedString}");

return processedString;
}

}

}
Код файла StringProc2: -

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StringProc2
{
public class StringModifier
{
public static string ModifyString(string input)
{
// Reverse the input string
char charArray = input.ToCharArray();
Array.Reverse(charArray);
string modifiedString = new string(charArray);

Console.WriteLine($"Step 2 - Modify (Reverse): {modifiedString}");
return modifiedString;
}
}

}
Когда я пытаюсь вызвать их через Java, появляется это исключение: -

Код: Выделить всё

Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokePointer(Native Method)
at com.sun.jna.Function.invokePointer(Function.java:500)
at com.sun.jna.Function.invokeString(Function.java:663)
at com.sun.jna.Function.invoke(Function.java:439)
at com.sun.jna.Function.invoke(Function.java:364)
at com.sun.jna.Library$Handler.invoke(Library.java:270)
at jdk.proxy1/jdk.proxy1.$Proxy0.ProcessString(Unknown Source)
at Main.main(Main.java:18)
Я создал эту dll в 64-битной версии, и моя jvm также является 64-битной, и проверил, что моя функция C#, которую я пытаюсь вызвать через Java, также успешно экспортируется через средство обхода зависимостей.
/>Я пытался найти решение, но безуспешно.
Кто-нибудь может мне с этим помочь?

Подробнее здесь: https://stackoverflow.com/questions/791 ... s-from-dll
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»