2012-11-14 15 views
5

私たちは.NETフレームワークでプロジェクトをやっており、その機能の大部分を後でLuaスクリプトで利用できるようにしたいと考えています。私はdllをコンパイルし、LuaInterfaceの助けを借りてそれをLuaスクリプトにロードできると思った。しかし何とかそれはうまくいかなかった。Lua(forWindows)用のカスタム.NET DLL読み込みを作成するには?

仕事をやった

は以下の通りです:

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のクラスです。このコードを実行すると、通訳者はグローバルPlanetSystem(nil値)を呼び出そうとします。

私もDLLをロードする別の方法を試してみました:実行した後に

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

、インタプリタはスロー:LUA:エラーローディングモジュール「をLuaTest」ファイルから「\ LuaTest.dll。」:指定されたプロシージャ可能性があり見つけられない。

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

編集:おそらく私は、このDLLがLUAの読み込み可能であることを示すために、私のdllでLuaの 'エントリポイント'を持っているはずですか?

編集:LUAではありません。ポルトガル語を話す人々には違反しません。私が使用しているLunanetは.NET 4.0と互換性がなければなりません。さもなければ、最初のコードが動作しません。

+2

Luaは頭字語ではなく、適切な名前です。 LUAではなく、LUAです。 –

+0

はあなたのLuanetビルドは.Net 4.0と互換性がありますか? –

答えて

1

私は、アセンブリ名を、インポートしようとしているタイプの完全修飾名の必須部分であると混同していると思います。このエラーは、PlanetarySystemクラスが「完全な値」であることを示しています。つまり、完全修飾名でクラスが見つからない可能性があります。

第二に、私の最初の勧告がうまくいかない場合、クラスをComVisibleにして、Luaエンジンがあなたのクラスを見ることができるようにする必要があるかもしれません。

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

0

Try this link. I posted a solution which works fine! あなたのPCはよく準備された場合(インストールLUA &のC#2010など)をDLLプロジェクトにC#のコードをコピーし、それを構築します。次に、dllがあなたのlua環境の登録されたディレクトリにあることを確認し、同じ投稿に表示されるluaスクリプトを実行します。

追加の注意:.NET 3.5フレームワークを使用する必要がありました。 .NET 4.0ではLuaInterfaceがうまく動作しませんでした。

関連する問題