[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Lua and vc++.net
- From: Eric Scouten <scouten@...>
- Date: Fri, 24 Sep 2004 15:31:07 -0700
mathijs wrote:
Hello,
I'm having a problem using lua and .net. I'm using an unmanaged class
with lua in it in a managed .net app. It compiles fine but when
calling the first function that uses lua I get the following error:
An unhandled exception of type 'System.TypeLoadException' occurred
in Medusa Editor.exe
Additional information: Could not load type lua_State from
assembly Medusa Editor, Version=1.0.1728.36664,
Culture=neutral, PublicKeyToken=null.
The same class works fine in a fully unmanaged class.
Anyone had this problem before and/or knows how to fix it?
Yes, I've encountered this and it has nothing to do with Lua specifically.
IMHO it's a bug in the compiler for Managed C++. It only happens (as you
experienced) when compiling managed code. The compiler gets confused by
forward declarations of unmanaged types (like lua_State, for example)
and emits metadata that makes the runtime engine think it should find a
managed class/struct by that name. When you first attempt to load the
code containing this metadata, it doesn't find that type definition
(surprise, surprise), and you get the TypeLoadException.
The workaround for it is pretty simple, but a little tedious. In *every*
file that references lua_State (or any other forward declared, unmanaged
class/struct), you have to provide a fake definition for the type.
Adding the line:
struct lua_State {};
in the affected .c/.cpp file(s) should fix your problem.
I credit http://www.winterdom.com/mcppfaq/archives/000262.html for
helping me through this problem a few months ago. Worth reading.
-Eric