java - 使用 jni4net 从 .dll 生成 .java

标签 java c# dll java-native-interface jni4net

我有我的 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。我通过 Visual Studio 添加了这个 .dll 作为程序集。编译器很友好并且没有显示错误。 (在 Windows 应用程序中,代码运行良好。)

现在我想用

建立一座桥梁

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' namespace not found.

感谢您的阅读。

最佳答案

您应该添加 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 says

The type or namespace name 'identifier' could not be found in the global namespace (are you missing an assembly reference?)

本质上,您的 build.cmd 没有找到其他程序集 - Keyence.IV.Sdk.dll

您可以通过/reference:选项添加它,以便编译器Csc.exe可以找到该程序集。编辑 build.cmd 文件并为您在 Visual Studio 项目引用中添加的其他程序集添加其他 /reference: 部分。

您可以查看完整的编译器选项 here

关于java - 使用 jni4net 从 .dll 生成 .java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52292659/

相关文章:

c# - 我将如何为下面的代码生成 Xml ... Order 类中 void getxml() 方法的代码,这取决于 Delivery & Recipient 类

c++ - 使用 visual studio 2013 构建 glut dll 时出错

c++ - 单例和 .dll 中的 std::thread block

c++ - 如何包装作为成员函数的 DLL 函数?

java - 从多个线程中选择和更新一行的安全方法

java - 在 Java/Android 中测试空 JSON 对象

c# - 将 foreach 与 LINQ to Entities 一起使用时是否需要 ToList

java - Spring - 从 JUnit 和 Maven 运行时的不同测试结果

java - 如何将外部源的上下文添加到 Kafka Streams 中的记录的正确方法

c# - 在acumatica中使用webservices api导出数据时如何设置超时