將 psftp 包裝成 ATL 元件
今天嘗試將 psftp 包成 ATL 元件供其他人使用,但是卻碰到一些問題。首先是先經 psftp 專案中的所有檔案加入新建立的 ATL 專案中,這部份沒有問題。然後將一些 psftp.c 中的程式碼加入 ATL 元件的 Connect 方法中,這時編譯就出現錯誤了。
error C2129: static function 'int __cdecl psftp_connect(char *,char *,int)' declared but not defined
查了 Google 後又試了很久,才發現問題可能出在原先 psftp_connect 的定義上。在原本的程式碼中,該函式定義成 static int psftp_connect,但是因為宣告為 static 的函式只能在同一個文件中使用(說明),所以即使我嘗試用 extern "C" 的宣告於 .cpp 檔案中,錯誤訊息依然存在。後來將 static 的宣告拿掉後,果然該錯誤就沒有了。只是又有新的錯誤,
error LNK2001: unresolved external symbol "int __cdecl do_sftp_init(void)" (?do_sftp_init@@YAHXZ)
這次知道要用,只是平常都是只針對函式處理,沒想到還有針對 .h 文件處理的方式,
extern "C"
{
#include "psftp.h"
}
看來我的 C/C++ 還要在重修了。
error C2129: static function 'int __cdecl psftp_connect(char *,char *,int)' declared but not defined
查了 Google 後又試了很久,才發現問題可能出在原先 psftp_connect 的定義上。在原本的程式碼中,該函式定義成 static int psftp_connect,但是因為宣告為 static 的函式只能在同一個文件中使用(說明),所以即使我嘗試用 extern "C" 的宣告於 .cpp 檔案中,錯誤訊息依然存在。後來將 static 的宣告拿掉後,果然該錯誤就沒有了。只是又有新的錯誤,
error LNK2001: unresolved external symbol "int __cdecl do_sftp_init(void)" (?do_sftp_init@@YAHXZ)
這次知道要用,只是平常都是只針對函式處理,沒想到還有針對 .h 文件處理的方式,
extern "C"
{
#include "psftp.h"
}
看來我的 C/C++ 還要在重修了。