簡體   English   中英

使用JNI集成Java和.net dll

[英]Integrating java and .net dll using JNI

我正在做一個小項目,它是Java和.net dll的互操作性。

焦點:

我只有一個Java文件,該文件調用.net dll,該文件是使用C#和CPP和MCPP創建的。

該程序只是一個hello world程序。

我只引用下面提到的網站。

http://www.codeproject.com/Articles/378826/How-to-wrap-a-Csharp-library-for-use-in-Java

http://www.codeproject.com/Articles/13093/C-method-calls-within-a-Java-program

最終,我得到了一些想法,並最終完成了一些錯誤。

編碼:

#using "mscorlib.dll"
#using "CSharpHelloWorld.netmodule"

using namespace System;

public __gc class HelloWorldC
{
    public:

    // Provide .NET interop and garbage collecting to the pointer.
    CSharpHelloWorld __gc *t;

    HelloWorldC() {

        t = new CSharpHelloWorld();

        // Assign the reference a new instance of the object
    }

 // This inline function is called from the C++ Code
    void callCSharpHelloWorld() {

        t->displayHelloWorld();
    }
};

錯誤:

Error   1   error C4980: '__gc' : use of this keyword requires /clr:oldSyntax command line option   

Error   2   error C3699: 'interior_ptr' : cannot use this indirection on type 'CSharpHelloWorld'    

Error   3   error C2750: 'CSharpHelloWorld' : cannot use 'new' on the reference type; use 'gcnew' instead   

Error   4   error C2440: '=' : cannot convert from 'CSharpHelloWorld *' to 'CSharpHelloWorld ^' 11  WindowsComponentProject

Error   5   error C2011: 'HelloWorldC' : 'class' type redefinition  6   WindowsComponentProject

Error   6   error C3699: '*' : cannot use this indirection on type 'HelloWorldC'    18  WindowsComponentProject

Error   7   error C2750: 'HelloWorldC' : cannot use 'new' on the reference type; use 'gcnew' instead    18  WindowsComponentProject

Error   8   error C2440: 'initializing' : cannot convert from 'HelloWorldC *' to 'HelloWorldC ^'    18  WindowsComponentProject

Error   9   error C2027: use of undefined type 'HelloWorldC'        21  WindowsComponentProject

Error   10  error C2227: left of '->callCSharpHelloWorld' must point to class/struct/union/generic type  21 WindowsComponentProject

我只是尋找一些網站來更改CLR屬性的解決方案,但是它對我沒有幫助。.預先感謝!

您正在使用舊的托管C ++語法。 新的稱為C ++ / CLI。

通過在類聲明的前面加上ref關鍵字來創建引用類型。 CSharpHelloWorld^ t一樣,使用^聲明引用變量。 gcnew是用於在托管堆中創建對象的工具。

您應該按如下所示修改課程。

using namespace System;

public ref class HelloWorldC { 

public:

// Provide .NET interop and garbage collecting to the pointer.
CSharpHelloWorld^ t;

HelloWorldC() {

    t = gcnew CSharpHelloWorld();

    // Assign the reference a new instance of the object
}

// This inline function is called from the C++ Code
void callCSharpHelloWorld() {

    t->displayHelloWorld();
}
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM