當前位置:首頁 » 編程語言 » c語言動態庫怎麼使用
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言動態庫怎麼使用

發布時間: 2023-07-31 15:43:22

『壹』 c語言環境下如何使用動態sql

你真是牛人呀。資料庫類型那麼多,有oraclemysqlDB2SQLSQLsevera。你使用的那種。

相對於來說我使用oracle多。

給你一個pro*c的操作實例吧

/ 定義符號常數
#define USERNAME "SCOTT"
#define PASSWORD "x"
#include <stdio.h>
// 說明SQLCA和ORACA
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
// 啟用ORACLE通訊區:ORACA=YES,使它能被使用
EXEC ORACLE OPTION (ORACA=YES);
// 說明SQL變數
EXEC SQL BEGIN DECLARE SECTION;
char* username=USERNAME;
char* password=PASSWORD;
VARCHAR sqlstmt[80];
int emp_number;
VARCHAR emp_name[15];
VARCHAR job[50],job1[50],job2[50];
float salary;
EXEC SQL END DECLARE SECTION;
main()
{
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
// 發生錯誤時,保存SQL語句至ORACA
oraca.orastxtf=ORASTFERR;
// 登錄到ORACLE
EXEC SQL CONNECT :username IDENTIFIED BY :password;
printf("/nConnect to ORACLE./n");
// 構造動態SQL語句
sqlstmt.len=sprintf(sqlstmt.arr,"INSERT INTO EMP(EMPNO,ENAME,JOB,SAL)VALUES(:V1,:V2,:V3,:V4)");
// 顯示SQL語句
puts(sqlstmt.arr);
// 用PREPARE語句分析當前的動態INSERT語句,語句名是S
EXEC SQL PREPARE S FROM :sqlstmt;
// 循環插表
for(;;)
{
printf("/nEnter employee number:");
scanf("%d",&emp_number);
if(emp_number==0)break;
printf("/nEnter employee name:");
scanf("%s",&emp_name.arr);
emp_name.len=strlen(emp_name.arr);
printf("/nEnter employee job:");
scanf("%s",&job.arr);
job.len=strlen(job.arr);
salary = 0; // With VC6, Missing this line will cause C Run-Time Error R6002.
printf("/nEnter salary:");
scanf("%f",&salary);
EXEC SQL EXECUTE S USING :emp_number,:emp_name,:job,:salary;
}

// 提交事務,退出ORACLE
EXEC SQL COMMIT RELEASE;
printf("/nHave a good day!/n");
exit(0);
sqlerror:
// 列印錯誤信息
printf("/n%.*s/n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
// 列印出錯SQL語句
printf("/n/"%.*s.../"/n",oraca.orastxt.orastxtl,oraca.orastxt.orastxtc);
// 列印出錯SQL語句所在行號及所在文件名
printf("on line %d of %.*s/n/n",oraca.oraslnr,
oraca.orasfnm.orasfnml,oraca.orasfnm.orasfnmc);

// 回滾事務,退出ORACLE
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK RELEASE;
exit(1);
}

『貳』 c語言如何調用dll動態鏈接庫

這是我以前的回答,是個兩數加法的例子,看了就明白了

你的dll不必用h頭文件,你用的是顯式聲明導出函數
vc在顯式聲明函數時會出現與vb不匹配的問題,他會把函數名改了,你必須用隱式聲明,就是def文件聲明才可以。
你的cpp里直接寫

int __stdcall add(int a, int b)
{
return (a+b);
}
然後再在工程里添加一個文本文件,注意,文件名是 makedll(如果不對就是工程名).def
裡面寫

LIBRARY makedll
EXPORTS
add @1
然後保存
編譯、連接

得到的dll就是vb可以調用的了

vb里呢,不用怎麼改

如下
Public Declare Function add Lib "makedll.dll" (ByVal a As Integer,ByVal b As Integer) As Integer

Private Sub Command1_Click()
Dim c As Integer
c = add(1, 2)
MsgBox c
End Sub

這有就應該沒問題了

『叄』 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文件:
  • [cpp]view plain

  • #include"static.h"

  • intsum(inta,intb)

  • {

  • returna+b;

  • }

  • 編譯這個項目之後,會在debug文件夾下生成static.lib文件,這個就是我們需要的靜態鏈接庫。
  • 下面說明如何調用靜態鏈接庫。

    首先需要新建一個空項目,起名為test。將之前static項目下的static.h和static.lib這個2個文件復制到test項目的目錄下,並在工程中加入static.h文件。

    新建一個test.cpp文件如下:

    [cpp]view plain

  • #include<stdio.h>

  • #include<stdlib.h>

  • #include"static.h"

  • #pragmacomment(lib,"static.lib")

  • intmain()

  • {

  • printf("%d ",sum(1,2));

  • system("pause");

  • return0;

  • }

  • 編譯運行可得結果:3
  • #pragma comment(lib,"static.lib"),這一句是顯式的導入靜態鏈接庫。除此之外,還有其他的方法,比如通過設置路徑等等,這里不做介紹。

    2.動態鏈接庫

    和創建靜態鏈接庫一樣,需要創建一個空的win32項目,選擇dll選項。創建dynamic.cpp和dynamic.h文件

    dynamic.h文件:

    [cpp]view plain

  • #ifndefDYNAMIC

  • #defineDYNAMIC

  • extern"C"__declspec(dllexport)intsum(inta,intb);

  • #endifDYNAMIC


  • dynamic.cpp文件:

    [cpp]view plain

  • #include"dynamic.h"

  • intsum(inta,intb)

  • {

  • returna+b;

  • }

  • 編譯這個項目,會在debug文件夾下生成dynamic.dll文件。

  • 下面介紹如何調用動態鏈接庫,這里講的是顯式的調用。

    在剛才的test項目下,把static.lib和static.h文件刪除,把dynamic.h和dynamic.dll復制到該目錄下,並在項目中添加dynamic.h文件,修改test.cpp文件為:

    [cpp]view plain

  • #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
  • 特別提示:

    1.extern "C"中的C是大寫,不是小寫

    2.如果從VS2010中直接運行程序,lib和dll需要放到test項目的目錄下;如果想雙擊項目test下的debug文件中的exe文件直接運行的話,需把lib和dll放入debug文件夾下。