Could not initialize global resource

On 18/06/2018 at 08:35, xxxxxxxx wrote:

Hi folks,
Recently, I tried to create my first Python plug-in, and I was troubled by a problem for a long time.

Console:  RuntimeError: Could not initialize global resource for the plugin.

I search a lot in the SDK document and forum, but I still don't know how to solve it. I hope can get your help. Here's my test code:

(test.pyp)
_____
import c4d
import sys
import os
from c4d import plugins,bitmaps
PLUGIN_ID = 1000001
OBJECTGROUP = 1001
OBJECT = 1002
MAP = 1003
class test(plugins.ObjectData) :
def __init__(self) :
self.SetOptimizeCache(True)
def ModifyObject(self, mod, doc, op, op_mg, mod_mg, lod, flags, thread) :
op.SetPoint(0,c4d.Vector())
op.Message(c4d.MSG_UPDATE)
return True
if __name__ == "__main__":
bmp = bitmaps.BaseBitmap()
    dir, file = os.path.split(__file__) 
bitmapfile = os.path.join(dir, "res", "Icon.tif")
result = bmp.InitWith(bitmapfile)
plugins.RegisterObjectPlugin(id=PLUGIN_ID, str="test",g=test,description="test",icon=bmp,info=c4d.OBJECT_MODIFIER)
___
(test.h)
__
#ifndef _Oatom_H_
#define _Oatom_H_
enum
{
    OBJECTGROUP = 1001,
    OBJECT = 1002,
    MAP = 1003,
};
#endif
__
(test.res)
__
CONTAINER test
{
NAME test;
INCLUDE Obase;
GROUP OBJECTGROUP
{
    LINK OBJECT {}
    LINK MAP {}
}
}
__
(test.str)
__
STRINGTABLE test
{
OBJECTGROUP "List";
OBJECT "obj"
MAP "map";
}

On 19/06/2018 at 02:21, xxxxxxxx wrote:

Hi,

The resource for the plugin can't be initialized because there's an error in test.str : a semicolon ';' is missing at the end of the line OBJECT "obj".

It looks like you've copied the resource for C++ SDK Oatom example.
It's better to copy the resource for a Python SDK example, for instance object plugin Py-RoundedTube.
Use this as a base to define resources: macro #def in .h, naming for parameters, resource tree structure etc.

Note Python plugins resource need c4d_symbols.h present in res folder.

On 20/06/2018 at 08:05, xxxxxxxx wrote:

Thank you for your help, Yannick Puech!

My first test plugin  run  successfully!

I made a stupid mistake a lot, such as forgetting to add a semicolon ";" and I forgot to add "s" folder of strings. It is these wrong to let me crazy for a long time. Next time I encounter a problem, I will check these low-level mistakes first.

I also want to ask a question again, why is the c4d_symbols.h file necessary? There seems to be nothing in it. What role does he have? I don't seem to find his introduction in the document. This also confuses me.

On 21/06/2018 at 01:21, xxxxxxxx wrote:

The c4d_symbols.h has to be there even if it's empty. It's mandatory for plugins that use description resources.

On 21/06/2018 at 07:40, xxxxxxxx wrote:

Yeah, I get it! Thank you for your patient answer, Yannick Puech!