# DLL in Java einbinden



## formatter (2. Jan 2006)

Hallo Leute,

ich möchte eine DLL (genau gesagt von Consors die CortalConsors.TradingAPI.dll) in ein Java Programm einbinden. Ein Beispiel in C# liefert Consors mit, ich möchte gleiches/ähnliches in Java erreichen:


```
############################################
using System;
using CortalConsors.TradingAPI.DE;
using CortalConsors.TradingAPI.ValueObjects;
using CortalConsors.TradingAPI.ValueObjects.DE;

namespace OrderInquiry
{
	/// <summary>
	/// Example class for OrderInquiry.
	/// </summary>
	class TradingAPIClient
	{
		/// <summary>
		/// Main method of the program.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{

			try 
			{
				// Create the session facade
				SessionFacade sf = new SessionFacade();
				
				// Login
				sf.LoginWithAddOnName("OrderInquiryC#");
				
				// Create the request
				OrderInquiryRequest oireq = sf.CreateOrderInquiryRequest();
				
				// Set all necessary parameters on the request
				oireq.Maxrecords = 10;
				
				// Send the request and obtain the reply
				OrderInquiryReply oirep = sf.SendOrderInquiryRequest(oireq);

				Console.WriteLine("OrderInquiry successful: ");

				// Evaluate the reply				
				for (int i=0; i < oirep.GetOrderInquiryItemsCount(); i++)
				{
					OrderInquiryItem oii = oirep.GetOrderInquiryItem(i);
					Console.WriteLine(oii.Orderno+" "+oii.SecurityCode+" "+oii.SecurityName+" "+oii.Ordertype+" "+oii.SecurityNominalAmount+" "+oii.Status+" "+oii.SecurityAmountExecuted);
				}
    
                // Logout
				sf.Logout();
			}
			catch (Exception ex) 
			{
				Console.WriteLine("an exception occured during execution:");
				Console.WriteLine(ex.Message);
			}
		}
	}
}

########################################################
```


Wie müßte in Java so etwas prinzipiell aussehen????

Danke,
Formatter


----------



## Campino (2. Jan 2006)

Also:

Ich habe keine Ahnung, was dein Code macht oder was die dll für Funktionen enthält, beschreib doch mal.

Ansonsten brauchst du für dll's in Java immer das JNI oder ähnliches, guck mal in die FAQ oder in deine kristallgoogle (lieferbar bei jedem gut sortierten BrowSeher ) )...

Ansonsten guck doch mal ob Consor die Bibliotheke vllt. auch für Java anbieten, jenachdem was die macht kann das sein...muss aber nicht...


----------



## Roar (2. Jan 2006)

du musst dir eine wrapper dll schreiben, die jni konform ist, üebr die du die api ansprichst.
einfach drauf zugreifen geht so nicht.
schau mal hier: http://java.sun.com/docs/books/tutorial/native1.1/
dass dummes cc keine java api liefert find ich ganz schön böse :x


----------



## PoiSoN (2. Jan 2006)

Hallo,
schonmal gegoogelt?
http://www.informatik-forum.at/archive/index.php/t-10416.html


----------



## formatter (2. Jan 2006)

Consors bietet das Beispiel auch in C++.NET und VB.NET an. Die DLL soll als .NET Bibliothek für alle .NET Sprachen zu Benutzen sein. Darum hatte ich gehofft, mit System.loadLibrary die DLL einbinden und auf die Methoden zugreifen zu können (z.B. LoginWithAddOnName im obigen Beispiel).
Ist Java eine .NET Sprache?


----------



## MPW (2. Jan 2006)

Nein, aber java kann das über JNI machen.

=> Siehe Tutorial


----------



## thE_29 (3. Jan 2006)

Das Problem ist, das .NET andere Typen hat als Java!!

Und daher gehts auch net ohne Wrapper DLL!!


Zum Bleistift:

Methodenkopf in C++

void bla(int i,char *ar[]);

In Java würde das aber so aussehen

void bla(int i, String []ar);

Wie kann man das aufrufen?!?!

Gar nicht, bzw, wie willst du die Daten richtig übergeben??

Dazu, braucht man ne Wrapper DLL!


----------



## Bleiglanz (3. Jan 2006)

das ist komplett Unsinnig

eine .NET DLL (eine Assembly) hat - ausser dem Namen - überhaupt nichts mit den herkömmlichen DLLs zu tun, die heissen zwar so aber da steht .NET Bytecode drin (und kein i386 Maschinencode)

ich schätze dass jeder Versuch das mit Java zu nutzen scheitern wird...

IMHO einzige - theoretische - Möglichkeit

du schreibst zuerst eine echte i386 DLL mit
unmanaged C Code, in diesen wurstelst du 
die vom VisualStudio erzeugten COM-NET-Wrapper
für deine .NET-DLL Klassen hinein

und dann erzeugst du für diese neue native DLL einen JNI Wrapper

ob das geht?

hmm??


----------



## SnooP (3. Jan 2006)

*wüah*... mir wird schlecht  ...

ich würd das ganze komplett in .Net machen - so schlimm ists ja gegenüber java auch nicht - c# ist ja doch ziemlich syntaxkompatibel...
schreib doch nen .Net-Client als Webservice über den du mit eigenen Javaclients zugreifen kannst


----------



## formatter (3. Jan 2006)

...das werde ich auch versuchen. habe mir schon c# tutorial besorgt. Danke für die Hilfe.

Gruß,
Formatter


----------

