bad path to plugin res directory

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 19/01/2010 at 14:23, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   11.027 
Platform:      
Language(s) :     C++  ;

---------
Hi,

When my plugin executes, it tries to load the resource files from the path of the CINEMA_4D executable instead of from the plugin path.

I tried using resource.Init("path_to_my_plugin_directory"), but that does not work.

I also tried resource.ReloadResource, even though the header file warned against it. But it still does not work.

In both cases, the methods were called in response to the C4DPL_INIT_SYS plugin message.

What am I overlooking? How can I force Cinema4D to look for my resource files in the plugin path instead of in the CINEMA_4D path?

Note that when we launch cinema4D, we first set the C4D_PLUGINS_DIR environment variable. Could that be causing a problem with loading resources?

Thanks!

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 20/01/2010 at 00:41, xxxxxxxx wrote:

I am not sure what you mean with resources. If you just want to get the plugin path I think Filename GeGetPluginPath(void) is what you are looking for. It returns the plugin path.

cheers,
Matthias

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 21/01/2010 at 12:33, xxxxxxxx wrote:

There are three res files that are needed by the plugin:
    res/description/vpapplylut.h
    res/description/vpapplylut.res
    res/strings_us/description/vpapplylut.str

According to the documentation, the res directory should exist in the same directory as the plugin dso:
    /path_to_my_plugin/applylut.so
    /path_to_my_plugin/res

But Cinema4D wants to load the files from it's own res directory:
    /path_to_executable/CINEMA_4D
    /path_to_executable/resource/res
    /path_to_executable/resource/strings_us

I'm trying to force Cinema4D to load the res files from the plugin path.

I just tried this (as recommended in the SDK documentation) :

  
Bool PluginStart(void)   
{   
    const Filename pluginPath = GeGetPluginPath();   
    if (!resource.Init(pluginPath)) return FALSE;   
    Bool result = RegisterVideoPostPlugin(ID_APPLYLUT, "applyLUT", 0,   
            ApplyLut::Alloc, "VPapplyLut",0,0);   
}   

It does not work, as resource.Init returns FALSE.

Note that if I copy the files from the plugin res directory into the executable res directory, then it loads correctly. So I'm convinced that there's no problem with the res files themselves.

How can I force Cinema4D to load these files from the plugin directory?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 22/01/2010 at 03:00, xxxxxxxx wrote:

Originally posted by xxxxxxxx

Note that when we launch cinema4D, we first set the C4D_PLUGINS_DIR environment variable. Could that be causing a problem with loading resources?

I tried to reproduce the problem but it is working fine or me. Could this be a problem of the path itself (network path?) or the way you run Cinema (commandline?) ?

Have you tried if this happens on a Windows system too?

To use a custom resource path you have to allocate a GeRource for your plugin. Please check following code:

  
//global pointer to custom resource  
GeResource *customres = NULL;  
  
  
//C4D_PL_INIT  
Filename fn = Filename("custom_res_path");  
  
customres = gNew GeResource;  
if(customres && customres->Init(fn))  
{  
  LocalResource* localres = NULL;  
  localres = customres->Get();  
  //register custom description location  
  RegisterDescription(unique_ID, "VPapplyLut", localres);  
}  
  
  
//C4DPL_ENDACTIVITY  
if(customres)  
{  
  customres->Free();  
  gDelete(customres);  
}  

cheers,
Matthias

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 21/06/2010 at 09:03, xxxxxxxx wrote:

I have been trying for days to understand why I am getting the same results (Windows 7, 64 bit, Cinema 11.027). Given my current level of expertise with Cinema 4D plugins, it is quite likely that I am doing something wrong.

Demo:

http://rapidshare.com/files/401366326/otest.zip.html
MD5: 1622D41CAD5D76799FBC7D4AE844EB9C

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 26/09/2010 at 08:01, xxxxxxxx wrote:

After comparing with RoundedTube, I found out I had to the following:

Bool PluginMessage(LONG id, void *data)
{
  switch (id)
  {
      case C4DPL_INIT_SYS:
          if (!resource.Init()) return FALSE; // don't start plugin without resource
          return TRUE;
}
return FALSE;
}

Instead of just

Bool PluginMessage(LONG id, void *data)
{
return true;
}

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 26/09/2010 at 14:21, xxxxxxxx wrote:

Most definitely.  You MUST examine the examples in the cinema4dsdk folder.  You will never figure out all of the nuances by looking only at the SDK docs. :)