2009-10-18 4 views
3

LuaInterface가 바보이기 때문에 리눅스에서 실행되는 것처럼 보이기 때문에 (실제로 더 유용하다면 the relevant SO thread 참조), 거기에 제안 된 것을하기로 결정했습니다. . 지금 자신의 Lua511.LuaDLL를 호스팅하는 편집 LuaInterface.dll (함께LuaInterface를 "수정"하는 동안 DllNotFoundException이 발생하지만 그 이유는 무엇입니까?

//For example, like this: 
[DllImport("lua51")] 
public static extern IntPtr luaL_newstate(); 

: 나는 lua51에서 각각의 같이 DllImport으로 매 공공 기능을 대체 LuaInterface에서 사용하는을 반영하기 위해 내 자신의 Lua511.LuaDLL 클래스를 썼다) 내 게임의 시작 폴더에 순수 네이티브는 Win32 lua51.dll, 어떻게 든 LuaInterface의 시도를 초기화 할 때 DllNotFoundException를 얻을 :

public Lua() 
{ 
    luaState = LuaDLL.luaL_newstate(); //right there, right then. 
    ... 

당연히, 바로 거기 DLL로는 그렇게해서는 안 오른쪽 ? 이상하게도 lua51.dll의 망가진 .Net 버전을 다시 사용하면 EntryPointNotFoundException이 대신 발생합니다. boggles.

그럼 어떻게 됐어?

관련 소스 코드 : Lua511.cs, LuaInterface 프로젝트에 놓은 다음 대체 할 수 있도록 참조를 제거했습니다.

편집 : 이걸 스크류, 대안을 찾아 볼게. 또는 내 자신의 롤. 아니면 리눅스 호환성에 신경 쓰지 마라.

답변

4

my question을 참조했습니다. 문제를 해결하기 위해 다른 방법을 사용하고 새로운 Lua .NET 인터페이스를 개발하기 시작했습니다. 나는 그것을 Lua4Net이라고 불렀다.

sources on Google hosting을 찾을 수 있습니다. 그리고 here the unit tests.

현재 구현 된 기능 : 예외 처리 기능을 사용하여 코드를 실행하고 반환 값을 제공하십시오. 매개 변수 처리로 전역 함수를 등록하십시오.

다음과 같은 기능 : 전역 변수 가져 오기/설정; 디버깅 지원, ...

native windows DLL here (here에서 이름이 바뀐 VC++ 9.0 DLL 임)을 찾을 수 있습니다.

AND : 오늘은 처음으로 리눅스/모노 테스트을 실행하고 모든 유닛 테스트가 작동했습니다.

+0

아주 인상적. 오늘 나중에 이것 좀 봐야 겠어. – Kawa

1

AFAIK mono는 기본적으로 Linux의 기본 라이브러리에 .so extension을 사용합니다.

lua51.dll의 이름을 lua51.so로 바꾸거나 DllImport 특성에서 dllname을 변경하십시오. 또는 dllmap을 사용하십시오.

+0

Eeeeeh no. 실제로 Windows에서 실행하고 있습니다. 그리고 DllImport는 확장을 지정하지 않습니다. – Kawa

+0

오, 미안하지만, 나는 오해했습니다. 나는 LuaInterface에서 len51.dll을 Dependency Walker로 검사 한 결과, * no * 함수를 내보내는 것으로 나타났습니다. 그런 다음 소스에서 lua51을 다시 작성했습니다. EntryPointNotFoundException (.NET 및 Mono 모두)에서 함수로드 및 실패로 시작되었습니다. 그러한 함수가 없으므로 정상입니다. lua_createtable의 맨 위에 정의 된 lua.h의 매크로입니다. lua.h의 많은 다른 함수들도 마찬가지입니다. 그래서, 나는 당신이 진짜 함수에 대한 호출과 그들을 위해 DLL을 가져와 대체해야한다고 생각 LuaInterface 일할 수있는 기회를 가졌어요. –

+0

lua511 파일을 편집했습니다.cs는 간단한 스크립트를 실행합니다. 여기 http://pastie.org/659584를 참조하십시오. 희망이 도움이 될 것입니다 –