|
发表于 2012-9-24 08:45:22
|
显示全部楼层
本帖最后由 liuzhiyu123 于 2012-9-24 08:45 编辑
the_mercury 发表于 2012-9-20 09:34
问题是如果一个DLL没有导出的话,即使你用了LoadLibrary()来动态加载DLL,并且用GetProcAddress()获取函数的 ...
GetProcAddress()这个是没有的,是我说错了,请看下面
是这样的:
1.首先看这个函数定义,例如:- REGISTER_OSGPLUGIN( osg2, ReaderWriterOSG2 )
复制代码 2.再看里面的内容- #define REGISTER_OSGPLUGIN(ext, classname) \
- extern "C" void osgdb_##ext(void) {} \
- static osgDB::RegisterReaderWriterProxy<classname> g_proxy_##classname;
复制代码 3.再看这个- static osgDB::RegisterReaderWriterProxy<classname> g_proxy_##classname
复制代码 4.在进去- class RegisterReaderWriterProxy
- {
- public:
- RegisterReaderWriterProxy()
- {
- if (Registry::instance())
- {
- _rw = new T;
- Registry::instance()->addReaderWriter(_rw.get());
- }
- }
- ~RegisterReaderWriterProxy()
- {
- if (Registry::instance())
- {
- Registry::instance()->removeReaderWriter(_rw.get());
- }
- }
- T* get() { return _rw.get(); }
- protected:
- osg::ref_ptr<T> _rw;
- };
复制代码 5.最后- Registry::instance()->addReaderWriter(_rw.get());
复制代码 有了这句,您就应该明白插件已经加载到那个插件链表中,然后再次进行后缀匹配,这样就找到了,当然LoadLibrary是必须的
|
|