c語言調用c靜態庫
Ⅰ c語言vs怎麼使用自己做的靜態庫與動態庫,本人小白,請求詳解
1.靜態鏈接庫
打開VS2010,新建一個項目,選擇win32項目,點擊確定,選擇靜態庫這個選項,預編譯頭文件可選可不選。
在這個空項目中,添加一個.h文件和一個.cpp文件。名字我們起為static.h和static.cpp
static.h文件:
[cpp]view plain
#ifndefLIB_H
#defineLIB_H
extern"C"intsum(inta,intb);
#endif
- static.cpp文件:
#include"static.h"
intsum(inta,intb)
{
returna+b;
}
- 編譯這個項目之後,會在debug文件夾下生成static.lib文件,這個就是我們需要的靜態鏈接庫。
#include<stdio.h>
#include<stdlib.h>
#include"static.h"
#pragmacomment(lib,"static.lib")
intmain()
{
printf("%d ",sum(1,2));
system("pause");
return0;
}
- 編譯運行可得結果:3
#ifndefDYNAMIC
#defineDYNAMIC
extern"C"__declspec(dllexport)intsum(inta,intb);
#endifDYNAMIC
#include"dynamic.h"
intsum(inta,intb)
{
returna+b;
}
- 編譯這個項目,會在debug文件夾下生成dynamic.dll文件。
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include"dynamic.h"
intmain()
{
HINSTANCEhDll=NULL;
typedefint(*PSUM)(inta,intb);
PSUMpSum;
hDll=LoadLibrary(L"dynamic.dll");
pSum=(PSUM)GetProcAddress(hDll,"sum");
printf("%d ",pSum(1,2));
system("pause");
FreeLibrary(hDll);
return0;
}
- 編譯運行結果為:3
[cpp]view plain
下面說明如何調用靜態鏈接庫。
首先需要新建一個空項目,起名為test。將之前static項目下的static.h和static.lib這個2個文件復制到test項目的目錄下,並在工程中加入static.h文件。
新建一個test.cpp文件如下:
[cpp]view plain
#pragma comment(lib,"static.lib"),這一句是顯式的導入靜態鏈接庫。除此之外,還有其他的方法,比如通過設置路徑等等,這里不做介紹。
2.動態鏈接庫
和創建靜態鏈接庫一樣,需要創建一個空的win32項目,選擇dll選項。創建dynamic.cpp和dynamic.h文件
dynamic.h文件:
[cpp]view plain
dynamic.cpp文件:
[cpp]view plain
下面介紹如何調用動態鏈接庫,這里講的是顯式的調用。
在剛才的test項目下,把static.lib和static.h文件刪除,把dynamic.h和dynamic.dll復制到該目錄下,並在項目中添加dynamic.h文件,修改test.cpp文件為:
[cpp]view plain
特別提示:
1.extern "C"中的C是大寫,不是小寫
2.如果從VS2010中直接運行程序,lib和dll需要放到test項目的目錄下;如果想雙擊項目test下的debug文件中的exe文件直接運行的話,需把lib和dll放入debug文件夾下。
Ⅱ 用C語言寫的程序能調用C++寫的靜態庫嗎
能。只要協議匹配的靜態庫不管什麼語言寫的都能用。
Ⅲ c語言調用庫函數用什麼命令
您好,很高興回答您的問題。
在c語言中,專門建立有一組需要經常使用、但是編寫起來不太簡單的函數,系統把這些功能載入到軟體內容。普通用戶所需要使用時,只需要按照規定輸入正確的調用語句,即可打開並運行謝謝文件。打開的格式為#include<對應文件名>,如打開輸入輸出函數為#include<stdio. h>。
Ⅳ C語言調用靜態庫顯示"不是內部或外部命令,也不是可運行的程序或批處理文件"
你通過VS調試運行程序的時候默認會去查找程序目錄下面的Debug中的和項目同名的exe文件(你的情況是TEST.exe)。因為你編譯失敗了,exe文件沒有生成所以找不到這個文件去執行。你目前的情況看來是你嘗試用C的編譯器去編譯C++代碼(因為你創建的是.c文件)所以失敗。把文件名改成cpp重新編譯再試
Ⅳ C語言 靜態庫之間可以相互調用么
可以的,天津lib和.h文件到項目,然後就可以調用。
但是必須有一個被動,一個主動,你不要搞成間接遞歸。
Ⅵ c語言如何 調用外部程序
調用外部程序介面
方法1.
Process p=Runtime.getRuntime.exec("cmd")(最常用)
方法2.
Process p=new ProcessBuilder(cmd).start()
但是一般方法一比較常用, 下面我們介紹下方法一中關於抽象Process類的常用函數
//向對應程序中輸入數據
();
//獲得對應程序的輸出流(沒寫錯)
();
//獲得程序的錯誤提示
();
//等待程序執行完成,返回0正常,返回非0失敗
abstractpublicintwaitFor()throwsInterruptedException;
//獲得程序退出值,0正常退出,非0則異常
abstractpublicintexitValue();
//銷毀進程
abstractpublicvoiddestroy();
其中前3個函數用的最多