Codejie's C++ Space
Using C++
LingosHook:Plugins under wxWidget
这几天一直在被Plugins折腾,用老办法用wxWidget实现插件方式一直都失败,主要是在DLL中创建的窗口无法获得Application Instance,导致窗口弹出时,直接CORE,很是苦恼。。。后来尝试将主窗口的Instance和Window作为参数传给DLL中的窗口,弹出没有问题,但当窗口关闭是,也会引起主窗口关闭,怀疑是公用消息队列所致,又是苦恼了几天~
好在现在世界无限大,找来找去,还真发现早有前辈实现了这些,啥也不管了,COPY & PASTE 先,爸爸说的好--“天下文人是一家”,我觉得程序员亦是如此。。。
原帖在这,敬请移步--
http://wxforum.shadonet.com/viewtopic.php?t=13178&highlight=plugin
虽还没有太弄懂其原理,但大体看原帖应该也碰到了和我一样的问题。所以其在DLL创建窗口前,先初始了一个App来接管或者封装住后面的窗口。实在是高人,至少我没有想到这样,用到的那些函数也从没见过,实在是高啊。。。这里我还有些糊涂,此时DLL中的窗口运行在哪个进程中?我还不想在LingosHook中引入锁。。。
下面是主要的,也是重要的代码。
#ifndef __EXPORTS_H__
#define
__EXPORTS_H__
//
http://wxforum.shadonet.com/viewtopic.php?t=13178
&highlight=plugin
#include
"
wx/wx.h
"
#include
"
wx/msw/private.h
"
#define
IMPLEMENT_PLUGIN(name) \
extern
"
C
"
__declspec(dllexport) ActivityObject
*
GetActivity()
{
return
new
name; }
\
\
class
name##DLLApp :
public
wxApp \
{ \
}
; \
IMPLEMENT_APP_NO_MAIN(name##DLLApp) \
\
BOOL APIENTRY DllMain(HANDLE hModule, DWORD uCallReason, LPVOID pReserved) \
{ \
switch
(uCallReason) \
{ \
case
DLL_PROCESS_ATTACH: \
{ \
wxSetInstance((HINSTANCE)hModule); \
int
argc
=
0
;
char
*
argv
=
NULL; \
wxEntryStart(argc,
&
argv); \
return
TRUE; \
}
\
break
; \
case
DLL_THREAD_ATTACH: \
break
; \
case
DLL_THREAD_DETACH: \
break
; \
case
DLL_PROCESS_DETACH: \
wxEntryCleanup(); \
break
; \
default
: \
return
FALSE; \
}
; \
\
return
TRUE; \
}
\
#endif
上面代码被我去掉了几行,没别的意思,只是感觉么什么用处,当然也可能自己道行还不够,没体会到其中奥秘。不过去掉了还是能正常使用,如下图。有兴趣的,请去看原帖。
<---- 蛋疼的分割线---->
知道啥叫‘蛋疼’不。。。为了搞定这个Plugins,特意写了Test工程。。。搞死我了。。。
posted on 2011-01-07 18:39
codejie
阅读(1670)
评论(0)
编辑
收藏
引用
所属分类:
C++
、
LingosHook
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
C++: c++ wrap for libpq
Why the inline function can not be covered?
LingosHook : Development Environment Setup
LingosHook : HTML Data in Android Client
LingosHook: CDocumentOutputObject
LingosHook : Optimize TinyHtmlParser Class
OCI : do NOT debug on TWO different windows
LingosHook:Lingoes生词本第二十五版
LingosHook:1.4.000 and gettext
wxWidget:Catch KEY event of wxStaticBitmap.
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
公告
Using C++
导航
C++博客
首页
新随笔
联系
聚合
管理
统计
随笔 - 350
文章 - 0
评论 - 1501
引用 - 0
留言簿
(73)
给我留言
查看公开留言
查看私人留言
随笔分类
(513)
BoxCatcher(2)
(rss)
C++(93)
(rss)
EL(21)
(rss)
G7(39)
(rss)
I;P(18)
(rss)
LingosHook(93)
(rss)
MacBook Pro(2)
(rss)
MPQ - WOW(43)
(rss)
Raspberry-pi(3)
(rss)
Resource(8)
(rss)
SnakeGo(1)
(rss)
轮子精神(67)
(rss)
随笔而已(110)
(rss)
心情痕迹(13)
(rss)
积分与排名
积分 - 530499
排名 - 30
最新评论
1. re: LingosHook:Donators List
donate link cannot open,
though still cannot use on window server 2008 x64
--wosyem
2. re: C++: c++ wrap for libpq
类不错,可惜不会使用啊。
给一个例子吧。特别
请教 class TParams 怎么样使用?
谢谢啦。
--猪大头
3. re: LingosHook:困难
大神,Lingoes_ListKey的基类是listbox还是listview,上述问题有后续么。。。
--losfuyi
4. re: LingosHook : LingosHook的x64版也来了
codejie大神,现在怎么下载不了LingosHook的x64版呢?
--张三
5. re: LingosHook : LingosHook的x64版也来了
codejie大大,lingoes v2.9.2和这个版本的LingosHook x64不能hook啊,有没有什么方法可以解决呢?lingoes降低版本可以吗?
对了系统是win10
--rexxx_
阅读排行榜
1. LingosHook:Lingoes生词本下载页(48416)
2. 练习:LoadLibrary调用DLL中的Class(25288)
3. GSOAP:添加Header的处理(9443)
4. 使用DirectSound播放MP3文件(6008)
5. LingosHook:Lingoes生词本第二十五版(5744)
评论排行榜
1. LingosHook:Lingoes生词本下载页(188)
2. LingosHook: Compatible with Lingoes 2.9.0(102)
3. LingosHook:Q&A(79)
4. LingosHook : LingosHook的x64版也来了(62)
5. LingosHook: Release 1.6.700(50)