Advertisement

scriptbuilder and includes no matching signatures

Started by May 17, 2012 01:06 PM
2 comments, last by sylexer 12 years, 6 months ago
Hi,

I'm trying to implement the angelscript engine but i ran into a problem when i try to include other files in my angelscript source files.
I'm building the scripts with the scriptbuilder addon.
When i try to build the module i get the following error.

(3, 1) : INFO : Compiling void main()
(7, 5) : ERR : No matching signatures to 'testinclude()'

I have implemented my own include callback and verified that all the scripts get loaded and the callback is triggered.


//include handler, this function is called once for loading test.asc
int includeScript(const char *include, const char *from, CScriptBuilder *builder, void *userParam)
{
const char *contents = MBEngine::ResourceManager::loadTextFileConst(include);
if ( NULL != contents )
{
int ret = builder->AddSectionFromMemory(contents);

assert(ret >= 0);
return 0;
}
return -1;
}


scriptEngine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
int ret;
ret = scriptEngine->SetMessageCallback(asFUNCTION(MessageCallback), 0, asCALL_CDECL);
assert( ret >= 0 );

RegisterStdString(scriptEngine);
RegisterScriptArray(scriptEngine, true);
RegisterScriptMath(scriptEngine);
RegisterScriptDictionary(scriptEngine);
ret = scriptEngine->RegisterGlobalFunction("void print(const string &in)", asFUNCTION(print), asCALL_CDECL);
assert( ret >= 0 );

CScriptBuilder scriptBuilder;

//set the include loader
scriptBuilder.SetIncludeCallback( includeScript, NULL);

ret = scriptBuilder.StartNewModule(scriptEngine, "Main");
assert( ret >= 0 );

//load main script
const char *mainScript = ResourceManager::loadTextFileConst("main.asc");
ret = scriptBuilder.AddSectionFromMemory( mainScript );
assert( ret >= 0 );

//compile the script this where the compiler error is triggered
ret = scriptBuilder.BuildModule();
assert( ret >= 0 );


my 2 angelscript test files
main.asc


#include "test.asc"

void main()
{
print("I'm now in main()\n");

testinclude();
}


test.asc



void testinclude()
{
print("included function()\n");
}


I used the sample "include" as a reference
Who can help me, what i'm i missing here.
just when i posted the question is see my problem.



int CScriptBuilder::AddSectionFromMemory(const char *scriptCode, const char *sectionName)


AddSectionFromMemory takes 2 arguments.
I forgot the 2nd one to pass the included script name.
So the first one gets added and the second one gets ignored because of the same (null/empty) section name.

Thanks.
Advertisement
You're right. As both the main script and the included script was given the same name, i.e. "", the CScriptBuilder thought the included script was already there and skipped it.

I think I'll change the default behaviour when not giving an explicit name for the section so that instead of assuming "" it will build a unique name (probably a sequence). Hopefully it will avoid the kind of problem you experienced.

Regards,
Andreas

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

Thanks Andreas,

That would be a good choice/change.
Or I just needed to check the API more throughly.

Greets
Michael

This topic is closed to new replies.

Advertisement