5

私たちは .NET フレームワークでプロジェクトを行っており、その機能のほとんどを後で Lua スクリプトで利用できるようにしたいと考えています。LuaInterface の助けを借りて、dll をコンパイルし、それを Lua スクリプトにロードできると考えました。しかし、どういうわけかうまくいきませんでした。

DID の機能は次のとおりです。

require 'luanet' 
luanet.load_assembly("System.Windows.Forms")
Form = luanet.import_type("System.Windows.Forms.Form")
Button = luanet.import_type("System.Windows.Forms.Button")
form1 = Form()
button1 = Button()

ご覧のとおり、ここでは標準のアセンブリと型を読み込んでいますが、これは大きな問題にはなりませんでした。ただし、独自の dll 'LuaTest' を .NET 4.0 でコンパイルして、LUA にロードしようとすると、. それは動かなかった。のようなものを書きました。

require 'luanet'
luanet.load_assembly("LuaTest")
PlanetarySystem = luanet.import_type("LuaTest.PlanetarySystem")
solarSystem = PlanetarySystem()

ここで、'PlanetarySystem' は LuaTest のクラスです。このコードを実行すると、インタプリタは次のように言うでしょう: グローバル 'PlanetarySystem' (nil 値) の呼び出しを試みます。

dllをロードする別の方法も試しました:

package.path = package.path .. ";" .. "/?.dll"
require 'luanet'
require 'LuaTest'

実行後、インタープリターは次のメッセージをスローします。

私は .NET フレームワークと LuaInterface の初心者です。たぶん、私はまったく間違ったことをしました。これについて私を助けてください。どうもありがとう!

編集:おそらく、このdllがLUAロード可能であることを示すために、dllにLuaの「エントリポイント」が必要ですか???

編集:LUAではなくLua。ポルトガル語を話す人々に不快感はありません。私が使用している Lunanet は、.NET 4.0 と互換性がある必要があります。そうでない場合、最初のコードは機能しません。

4

2 に答える 2

1

アセンブリ名を、インポートしようとしている型の完全修飾名の必須部分と混同していると思います。このエラーは、PlanetarySystem クラスが「nil 値」であることを示しています。つまり、その完全修飾名でクラスを見つけることができなかった可能性があります。あなたのクラスがあった名前空間については確かです。

次に、最初の推奨事項が機能しない場合は、クラスを ComVisible にして、Lua エンジンがクラスを認識できるようにする必要があるかもしれません。

http://msdn.microsoft.com/en-us/library/ms182157.aspx

于 2014-06-08T03:06:49.380 に答える
0

このリンクを試してください。うまくいく解決策を投稿しました! PC の準備が整っている場合 (lua と C#2010 がインストールされている場合など)、C# コードを dll プロジェクトにコピーしてビルドします。次に、dll が lua 環境の登録済みディレクトリにあることを確認し、同じ投稿に示されている lua スクリプトを実行します。

追加のメモ: .NET 3.5 フレームワークを使用する必要がありました。.NET 4.0 では LuaInterface が機能しませんでした。

于 2015-05-08T13:53:09.573 に答える