Создание файла .java из .dll с помощью jni4net - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть библиотека классов c #.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Keyence.IV.Sdk;
using System.Reflection;
namespace JavaKameraSchnittstelle
{

public class KeyenceKameraSchnittstellen
{   
    private IVisionSensor[] sensor;
    private VisionSensorStore store;
    private List<byte[]> images;
    private DateTime lastUpdate;
    private bool[] areConnected;


    public KeyenceKameraSchnittstellen()
    {
    ...
    }

    //Listner
    public void ImageAcquired(object sender, ImageAcquiredEventArgs e)
    {
    ...
    }

    public void startTickTack()
    {
    ...
    }

    private void setImageAquiredListener()
    {
        ...
    }

    private void readIniDatei()
    {
       ...
    }

    private void init()
    {
        ...
    }

    private System.Net.IPAddress getLocalIp()
    {
        ...
    }

    public IVisionSensor[] getVisionSensoren()
    {
        ...
    }

    public List<byte[]> getImages()
    {
        ...
    }

    public bool[] getAreConnected()
    {
       ...
    }
}
}

Его основано на Keyence.IV.Sdk.dll. Я добавил этот .dll как сборку через Visual Studio. Компилятор дружелюбен и не показывает ошибок. (В Windows-Applikation код работает нормально.)

Теперь я хочу сделать Мост с

JNI4Net (proxygen.exe -... \ dll ....) enter image description here

Теперь я хочу выполнить build.cmd, но я получаю эту ошибку:

Z:\bwulf\GeneratedSchnittstelle>build.cmd
compile classes
JavaKameraSchnittstelle.j4n.jar
JavaKameraSchnittstelle.j4n.dll clr\javakameraschnittstelle\KeyenceKameraSchnittstellen.generated.cs(58,165): error CS0400: Der Typ- oder Namespacename
        'Keyence' konnte im globalen Namespace nicht gefunden werden. (Fehlt ein Assemblyverweis?) clr\javakameraschnittstelle\KeyenceKameraSchnittstellen.generated.cs(79,85): error CS0400: Der Typ- oder Namespacename
        'Keyence' konnte im globalen Namespace nicht gefunden werden. (Fehlt ein Assemblyverweis?) clr\javakameraschnittstelle\KeyenceKameraSchnittstellen.generated.cs(79,125): error CS0400: Der Typ- oder Namespacename
        'Keyence' konnte im globalen Namespace nicht gefunden werden. (Fehlt ein Assemblyverweis?) clr\javakameraschnittstelle\KeyenceKameraSchnittstellen.generated.cs(79,13): error CS0012: Der Typ
        'Keyence.IV.Sdk.IVisionSensor' ist in einer nicht referenzierten Assembly definiert. Fügen Sie einen Verweis auf        die Assembly 'Keyence.IV.Sdk, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null' hinzu. z:\bwulf\KameraSchnittstelle\JavaKameraSchnittstelle.dll: (Position des Symbols für den vorherigen Fehler)

Я не знаком с c #. Я нашел что-то с Assembly.LoadFile()..., но ничего не смог с этим поделать.

Где ошибка и почему я получаю эту ошибку:

Пространство имен 'Keyence' не найдено.

Спасибо, что прочитали.

1 Ответ

0 голосов
/ 15 сентября 2018

Вы должны добавить содержимое вашего файла build.cmd.

Предполагая, что build.cmd эквивалентно this

Csc.exe / nologo / warn: 0 /reference:....\lib\jni4net.n-0.8.9.0.dll /out:work/helloWorldFromCLR.exe / target: exe Program.cs

Это похоже на способ компиляции вашей программы на C #.

Ошибка CS0400 говорит

Не удалось найти тип или имя пространства имен «идентификатор» в глобальном пространстве имен (отсутствует ссылка на сборку?)

По сути, ваш build.cmd не находит другую сборку - Keyence.IV.Sdk.dll

Вы можете добавить его с помощью опции /reference:, чтобы компилятор Csc.exe мог найти сборку. Отредактируйте файл build.cmd и добавьте дополнительные разделы /reference: для дополнительных сборок, которые вы добавите в ссылку на проект Visual Studio.

Вы можете посмотреть полные опции компилятора здесь

...