Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C#] .NET Assembly DLL nutzen (https://www.delphipraxis.net/78389-%5Bc-%5D-net-assembly-dll-nutzen.html)

Luckie 4. Okt 2006 10:30


[C#] .NET Assembly DLL nutzen
 
Ichhabe mit Hilfe von ikvm (http://www.ikvm.net/index.html) aus einer Java datei eine .NET Assembly erzeugt. Dies ewill ich jetzt in einem C# Programm nutzen. Beim VC hab eich schon die DLL zu den Verweisen hinzugefügt, aber ich kann irgendwie immer noch nicht darauf zugreifen.

Die DLL heißt HelloWorld.dll und die enthaltene Klasse "HelloWorld". Wen ich jetzt schreibe
Code:
using HelloWorld;
Sagt mit der Compiler:
Zitat:

Der Typ- oder Namespacename "HelloWorld" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?)
Die DLL habe ich doch zu den Verweisen hinzugefügt? Was will er noch mehr?

OregonGhost 4. Okt 2006 10:33

Re: [C#] .NET Assembly DLL nutzen
 
Hast du dir die DLL mal im Reflector angeguckt?
Und, eigentlich muss in .NET jede Klasse in einem Namespace liegen, wenn ich mich nicht irre. Hast du den Namespace importiert?

Luckie 4. Okt 2006 10:42

Re: [C#] .NET Assembly DLL nutzen
 
Nun ja, es war eben eine ganz einfache Java Klasse:
Code:
/*
 *  Project   : PVS Soap Bridge Demo Java Programm
 *  Copyright : © 2006 Datawerk
 *  File Name : HelloWorld.java
 *  Author    : mp
 *  Date      : 2006-09-06
 *  Comment   : Java Demo-Programm mit Demo-Klassen für externe JNI-Aufrufe
 *
 */

public class HelloWorld {
    public static void main(String[] argv) throws Exception
    {
       System.out.print("Hello, world");
    }
   
    // einfache Interger Rückgabe
    public int intTest()
    {
       return 42;
    }
   
    // Integer Rückgabe mit Integer Parameterübergabe
    public int intTest2(int Value)
    {
       return Value * 2;
    }
   
    // einfache String Rückgabe
    public String strTest()
    {
       return "Hello, world";
    }
   
    // String Rückgabe mit String Parameterübergabe
    public String strTest2(String s)
    {
       return s + "world";
    }
}
Wie kann ich die DLL im Reflector angucken? Wird das Programm mit dem VS mitgeliefert?

OregonGhost 4. Okt 2006 10:45

Re: [C#] .NET Assembly DLL nutzen
 
Den Reflector kannst du bei Lutz Roeder runterladen, ist ganz nett, wenn du in Assemblys stöbern willst. Allerdings kannst du im Prinzip auch im Object Browser von Visual Studio die importierte DLL angucken. Wie gesagt, ich bin ziemlich sicher, dass deine Klasse in einem Namespace liegen muss, den du importieren musst. Ich weiß leider nicht, wie der in Java heißt, wenn man ihn nicht angibt :)

r2c2 4. Okt 2006 10:55

Re: [C#] .NET Assembly DLL nutzen
 
[Halbwissen]
Wenn man keinen Namespace angibt is IMHO die Klasse in einem unbenannten Standard-Namespace. Versuchs also mal ohne using...
[/Halbwissen]
Der Reflector müsste aber auf jeden Fall Aufschluss geben...

mfg

Christian

Luckie 4. Okt 2006 10:57

Re: [C#] .NET Assembly DLL nutzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So sieht das ganze im Refelctor aus (siehe Anhang).

r2c2 4. Okt 2006 11:02

Re: [C#] .NET Assembly DLL nutzen
 
Jo, das Teil hat keinen Namespace... Wie gesagt: Versuchs mal ohne using...

BTW: Das is nicht das Einzige, was der Reflector kann. Guck dich mal um... Du müsstest den kompletten .NET-Quelltext sehen können...

mfg

Christian

OregonGhost 4. Okt 2006 11:06

Re: [C#] .NET Assembly DLL nutzen
 
Using wegzulassen dürfte nicht funktionieren, man wechselt damit ja nicht Namespaces, sondern importiert sie nur. Entweder hat der Namespace doch irgendeinen Namen, oder du packst die Klasse mal testweise in einen "richtigen" Namespace und importierst den. Dann weißt du zumindest, ob es am Namespace liegt oder ein anderes Problem vorliegt.

Luckie 4. Okt 2006 11:12

Re: [C#] .NET Assembly DLL nutzen
 
Wenn ich es ohne using mache:
Code:
        private void Form1_Load(object sender, EventArgs e)
        {
            Int32 i = HelloWorld.intTest();                
        }
Zitat:

Der Name "HelloWorld" ist im aktuellen Kontext nicht vorhanden.
Code:
public class HelloWorld : Object
{
      // Methods
      [MethodImpl(MethodImplOptions.NoInlining), LineNumberTable((ushort) 11)]
      public HelloWorld();
      public virtual int intTest();
      public virtual int intTest2(int Value);
      [MethodImpl(MethodImplOptions.NoInlining), Throws(new string[] { "java.lang.Exception" }), LineNumberTable(new byte[] { 0x9f, 0x9c, 0x6f })]
      public static void main(string[] argv);
      public virtual string strTest();
      [MethodImpl(MethodImplOptions.NoInlining), LineNumberTable((ushort) 0x26)]
      public virtual string strTest2(string s);
}
Und intTest sieht so aus:
Code:
public virtual int intTest()
{
      return 0x2a;
}
Dumme Frage: Wie geht das mit den Namespace in Java? Ich habe eben in meinem dicken Buch geguckt, da taucht im Stichwortverzeichnis der Begriff Namespace nicht auf.

r2c2 4. Okt 2006 11:17

Re: [C#] .NET Assembly DLL nutzen
 
Andere Möglichkeit(aber eher unwahrscheinlich):
Code:
using -;
Zitat:

Zitat von Luckie
Wenn ich es ohne using mache:
Code:
        private void Form1_Load(object sender, EventArgs e)
        {
            Int32 i = HelloWorld.intTest();                
        }
Zitat:

Der Name "HelloWorld" ist im aktuellen Kontext nicht vorhanden.

Wo hast du ne Instanz von HelloWorld erzeugt? Scheint mir nämlich nicht statisch zu sein...

Zitat:

Dumme Frage: Wie geht das mit den Namespace in Java? Ich habe eben in meinem dicken Buch geguckt, da taucht im Stichwortverzeichnis der Begriff Namespace nicht auf.
Schon lang her, dass ich Java gemacht hab...

IMHO gibts in Java keine Namespaces. Aber sowas ähnliches: Ich mein das heißt da Package... Bin mir da aber nicht sicher. Kann auch sein, dass das da das Äquivalent zu ner Assembly is...

mfg

Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz