討論區快速選單
知識庫快速選單
用最高效的方式管理MySQL 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
插件範例
更改我的閱讀文章字型大小
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1033 | 人氣 3227 | 評價 1260 | 評價/貼文 1.22 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/10/31 下午 04:43:51
目標:演示不修改的主程式的情況下,任意加入插件檔


先到 http://blog.cxxl3d.tk/search/label/CxxlMan%20%E7%A8%8B%E5%BC%8F%E5%BA%AB 下載並安裝好 CxxlMan2 程式庫

插件範例下載
https://www.dropbox.com/s/7askbv8p4ju4pri/PluginExample.7z?dl=0

此範例在模擬小孩放學後,由正確的家長帶回,並有親子互動

主程式並不知道會有多少種物件,也不關心它們長什麼樣,只是把一個物件帶到懂得使用它的物件就行了

範例可以加入多個插件,但我很懶,只做了一個 Tom 插件,若有興趣可以依樣畫葫蘆多做幾個,不過同一個插件也可以加入多次

若把處理模擬小孩放學的功能也做成插件,那麼就可機動性的加入各種功能,祝大家開掛成功無往不力
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1033 | 人氣 3227 | 評價 1260 | 評價/貼文 1.22 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/10/31 下午 05:04:40
忘了放學後學校要清空,這樣在 IDE 的輸出訊息中可以看到插件檔被卸載,
還有這範例是用 vs2017 寫的

新版下載
https://www.dropbox.com/s/1kmvv6xhwt92469/PluginExample2.7z?dl=0
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 375 | 人氣 0 | 評價 1740 | 評價/貼文 4.64 | 送出評價 16 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/1 上午 12:37:07
我還沒有研究這些程式碼實際在幹什麼,只先編譯執行就遇到問題。

1. CxxMan2 library 編譯通過,應該沒問題。

2. 編譯 PluginExample 的時候遇到一堆編譯錯誤如下:
PluginExample.cpp:1:1: error: stray ‘\377’ in program
 ÿþ/ / P l u g i n E x a m p l e . c p p : š[©;N§cðSÉa(u z_„v2eQÞž0
 
 ^
PluginExample.cpp:1:2: error: stray ‘\376’ in program
 ÿþ/ / P l u g i n E x a m p l e . c p p : š[©;N§cðSÉa(u z_„v2eQÞž0
 
  ^
PluginExample.cpp:1:4: warning: null character(s) ignored
 ÿþ/ / P l u g i n E x a m p l e . c p p : š[©;N§cðSÉa(u z_„v2eQÞž0
 
    ^
PluginExample.cpp:1:6: warning: null character(s) ignored
 ÿþ/ / P l u g i n E x a m p l e . c p p : š[©;N§cðSÉa(u z_„v2eQÞž0
 
     ^

...... 後面還有很多

請問該如何處理?
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1033 | 人氣 3227 | 評價 1260 | 評價/貼文 1.22 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/1 上午 09:19:00
範例是在 win7 , 用 vs2017 編寫, big5 編碼
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 375 | 人氣 0 | 評價 1740 | 評價/貼文 4.64 | 送出評價 16 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/1 上午 10:02:09
>範例是在 win7 , 用 vs2017 編寫, big5 編碼

所以不用 win7、沒有 vs2017、也不是 big5 編碼的就沒法用了?
好爛的程式!這樣你寫的範例不是有和沒有是一樣的?

為什麼說你的程式這樣的設定很爛?若不解釋的話就是純情緒性發言,
所以我以下說明一下我的理由:

1. 限定 windows 7:
若你說限定 Windows 的話我還可以理解,平臺嘛!總是有些特殊的功能只在某個平臺比較好用。
我常也會寫出一些一些 Linux Only 的程式碼,畢竟現在在做 embbeded。
可是限定 Windows 7 這就不太對了!
雖然不少人用的是 win7,但現在絕大部分新電腦裝的是 win10,還有部份 win8、win8.1,
還有一些人用的還是 winXP,你叫這些人全去吃屎嗎?
而且我想不明白,不過就是一個簡單的 plugin 範例,為什麼你可以做到 Windows 限定,
而且還 win7 限定?

2. 限定 Visual C++ 2017:
同上,又不是大家都有 VS2017,那些用 2016、2015、2013、2010、2008、2005…… 的怎麼辦?
更何況很多人根本不用 VS,他們可能用的是 Borland C++、Intel C++、G++、Clan/LLVM 或其它。
我是不知道一個簡單的 plugin 範例為什麼會限定編譯器還限定版本啦!
像我很久以前也做過 plugin,別說版本了,基本上是什麼不同品牌編譯器都可以混用,也沒有很複雜。

3. 限定 Big5:
拜託!今年西元幾年了?還在用 Big5?
你知道我開你大部份的程式碼都是顯示亂碼嗎?
你有考慮過你的用戶不是 Big5 語系,甚至要設定成 Big5 語系都有困難嗎?
比如說一個西班牙客戶,用了你的程式你要他調成 Big5?那他自己的語言怎辦?
他自己國家的程式不能和你跑在同一臺電腦上,為了你必須要另外再架一臺?
別鬧了!Unicode 都出來多久了?

另外我還有些批評:

1.
會說出 Big5 這話就表示你可能不知道或不會配置文件編碼。
因為你的程式碼其實混雜了很多不同的編碼,有 ASCII、有 Bug5、有 UTF16LE、還有 UTF8。
我想不會有人故意要讓自己的文件這樣混亂,所以唯一合理的解釋就是你根本不知道這些,
你是用編輯器寫了就直接存檔,於是你剛好使用了不同的編輯器建立文件,
然後這些編輯器的預設編碼又不一樣,所以就產生各種不同編碼的文件。
但讓人欣慰的是至少你的換行格式還蠻統一的,都是 CRLF。

2.
如果說你完全就是能力不足就算了,
但是你前面做的 CxxMan2 程式庫卻可以正常的在我這裡編譯通過,
除了幾個 warning 外我沒遇到別的問題。
雖然我沒有興趣去看你 CxxMan2 裡面都怎麼寫,但它的品質和你後面範例的品質實在是差異太大,
於是讓人懷疑你是故意如此!
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1033 | 人氣 3227 | 評價 1260 | 評價/貼文 1.22 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/1 上午 10:30:25
我只是給你充分的資訊,你是老程式員要有找出問題和排除的能力,還有範例有用到一些 win 的功能,cxxlman2 程式庫是跨平台的,但範例不是
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 375 | 人氣 0 | 評價 1740 | 評價/貼文 4.64 | 送出評價 16 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/1 上午 10:44:21
看你的記錄,你不是好多好多年前就已經在這個論壇了。
我是老程式員,難道你不是嗎?
我是有把握可以花些時間編譯除錯到在我的平臺上順利執行,
只是我沒有這麼做,因為覺得不值得!我還有更有意義的事情要做。

你說使用到 windows 的功能該不會指 generate DLL 和 load library 這部份吧?
若是的話 Linux 也有對應的函式呼叫,用個 macro define 就可以簡單解決了,
範例嘛!不用搞太複雜。

我除了不想跳坑以外,其實也想順便測測你的程度,所以把那個錯誤訊息直接丟給你,
看你能不能意識到是因為 UTF-16 格式的問題,然後建議我調整編碼格式。
不過看來我想多了,算了!

既然如此,我就不琢磨在程式編譯和執行上面了,我只用「看」的來和你討論。

我閱讀了你的主要 plugin,也就是 Tom 下面的程式碼(然後忽略了包含主程式以外的其他程式碼)。
我納悶了!說好的 header only module 呢?怎麼沒有啊?
你的範例不就是要示範如何插入 header only 的 plugin 嗎?
怎麼搞來搞去最重要的重點空白啊?
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1033 | 人氣 3227 | 評價 1260 | 評價/貼文 1.22 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/1 上午 11:10:10
我沒做跨平台是因為重點又不在這裡,你那麼在意你去把它搞定

會用 big5 是因 win 的 Console 顯示會比較沒有問題

header only 的 plugin 是什麼,聽都沒聽過
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 375 | 人氣 0 | 評價 1740 | 評價/貼文 4.64 | 送出評價 16 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/1 上午 11:26:28
>我沒做跨平台是因為重點又不在這裡,你那麼在意你去把它搞定
>會用 big5 是因 win 的 Console 顯示會比較沒有問題

不予置評,我知道這是 Windows 本身的缺陷。
用 Windows 要寫出跨平臺的東西需要耗費很多額外力氣,我以前做過,我知道;
用 Linux 基本上不花力氣寫出的都是跨平臺的,除非使用到比較特殊的功能。
我已經逃離 Windows 的坑很久了!離開 Windows 讓我的編程式界輕鬆自在很多。
總之,我這是沒有 Windows,就是不能編譯執行,所以只用閱讀的。

>header only 的 plugin 是什麼,聽都沒聽過

這就不對了吧!你自己說過的話自己不記得了?
我幫你節錄一些回憶看這是不是別人冒充你說的話?畢竟才幾天前的事情而已!

http://www.programmer-club.com.tw/showsametitleN/c/47232.html

>>太好了!那你先告訴我,要怎麼樣在主程式不重新編譯的情況下增加一個新的外掛,而且是 header only 的外掛?
>>我是真的沒想出好方法所以虛心求教,畢竟這做得到的話,有些事情會很方便。
>>而也只有在上述這事情做得到的情況下,有關外掛 inline function 的討論才有實質意義對吧?
>
>這不是三言兩語可以說清楚,牽扯到許多技術,不過有人做成程式庫可以直接用,這裡推薦一個 ^^
>http://blog.cxxl3d.tk/2015/10/cxxlman2-class-lib.html

>好的,我另外開一個主題來說說,你稍待
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1033 | 人氣 3227 | 評價 1260 | 評價/貼文 1.22 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/1 下午 12:00:21
我也節錄一段

解決的辦法就是乖乖把在 header only 的執行程式碼移入 cpp,徹底放棄 header only,對於 template class 和第三方的 header only,就繼承出實作類別,再把實作程式碼放入 cpp,這樣就能解決執行碼到處散播的問題,經實驗是可以成功做出外掛。
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 375 | 人氣 0 | 評價 1740 | 評價/貼文 4.64 | 送出評價 16 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/1 下午 01:04:31
>我也節錄一段
>
>解決的辦法就是乖乖把在 header only 的執行程式碼移入 cpp,徹底放棄 header only,對於 template class 和第三方的 header only,就繼承出實作類別,再把實作程式碼放入 cpp,這樣就能解決執行碼到處散播的問題,經實驗是可以成功做出外掛。

這又不對了!

你當時在說這話的時候說是說:
1. 外掛可以有 inline function,而且在正常情況下可以被正常呼叫使用。
2. 外掛的 inline function 在 object instance 消逝的情況下,甚至是外掛已被卸載的情況下仍能被正常叫用;只有用 virtual 定義的那些會異常。

然後我說,放心,外掛的介面不可能會出現 inline function,就算做了,主程式也叫不到它;
然後你說可以做到!
於是後面就要求你給個範例。

這些事情都是發生在你的節錄話語之後,而且重點是後面你說做得到,所以才引起了至少我的好奇!

不過沒關係,既然技術上的事情已經明朗,再討論下去大概會跳到某種意識型態的無必要爭奪上。
我想就先到此為止吧!
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1033 | 人氣 3227 | 評價 1260 | 評價/貼文 1.22 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/11/4 下午 01:54:28
>你當時在說這話的時候說是說:
你理解有誤

>1. 外掛可以有 inline function,而且在正常情況下可以被正常呼叫使用。
inline function 和外掛一點關西也沒有,既無相依關係,也無相生相剋,我改一下 class Test 看對你的理解有沒有幫忙

class Test
{
 const char Str[20]{ "I am Test" };
public:
 Test()
 {
 }
 ~Test() {};


 // 迫使使用端一定得使用服務端提供的實作碼
 virtual const char *GetStr2() const
 {
  return Str;
 }

 friend const char *GetStr1(Test *pTest) const;
};

// inline
inline const char *GetStr1(Test *pTest) const
{
 return pTest->Str;
}

>2. 外掛的 inline function 在 object instance 消逝的情況下,甚至是外掛已被卸載的情況下仍能被正常叫用;只有用 virtual 定義的那些會異常。

object instance 消逝的的情況下都不應該呼叫其相關函數,inline function 也不例外

外掛被卸載不代表 object instance 消逝,請你想辦法驗證

>
>然後我說,放心,外掛的介面不可能會出現 inline function,就算做了,主程式也叫不到它;
>然後你說可以做到!
>於是後面就要求你給個範例。
這你瞎編的吧
我寫這範例是衝著你這句 "每當新增一個外掛的時候,主程式就要加入外掛標頭然後重新編譯一次?"

>
>這些事情都是發生在你的節錄話語之後,而且重點是後面你說做得到,所以才引起了至少我的好奇!
在這節語之後與此節語相違的事情都可以直接作癈了,還可以拿出來證明什麼
看來我寫這範例白寫了


>不過沒關係,既然技術上的事情已經明朗,再討論下去大概會跳到某種意識型態的無必要爭奪上。
>我想就先到此為止吧!
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.1875