使用 jni4net 生成 .java outof .dll
Generating a .java outof .dll with jni4net
我有我的 c# class 库。
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 ....)
现在我想执行 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# 程序的方法。
错误CS0400says
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
我有我的 c# class 库。
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 ....)
现在我想执行 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# 程序的方法。
错误CS0400says
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