1
我敢肯定的愚蠢的問題是一些不正確的語法。如何讓dlsym使用返回值的函數?我在下面的代碼中得到錯誤'無效轉換爲void *到LSError(*)()' - 試圖獲得編譯linux的lightscribe示例程序希望我可以將它與OSX dylib鏈接(爲什麼地獄「T HP發佈實際可可SDK LS纔出現了什麼6或7年了):???從dlsym()返回值的函數?
void* LSHandle = dlopen("liblightscribe.1.dylib", RTLD_LOCAL|RTLD_LAZY);
if (LSHandle) {
LSError (*LS_DiscPrinter_ReleaseExclusiveUse)() = dlsym(LSHandle, "LS_DiscPrinter_ReleaseExclusiveUse");
..
lsError = LS_DiscPrinter_ReleaseExclusiveUse(pDiscPrinter);
我發現這個頁面http://www.trilithium.com/johan/2004/12/problem-with-dlsym/,似乎解決了這樣的問題,有必要將void *轉換爲函數指針。 Uugh .. – 2011-03-06 04:34:59
我發現了一種工作。使用dlopen打開文件後,我有一組行: LSError(* LS_DiscPrinter_ReleaseExclusiveUse)(LS_DiscPrinterHandle); LS_DiscPrinter_ReleaseExclusiveUse =(LSError(*)(void *))dlsym(LSHandle,「LS_DiscPrinter_ReleaseExclusiveUse」); 這是相當笨拙。 xCode不喜歡在我發現的第二頁上使用typedef - 我不理解爲'extern「C」typedef XML_Parser parsercreate_t(const XML_Char *);'根本沒有提到XML_ParserStruct的返回類型。 – 2011-03-06 06:08:57