在桌面建立dll.c檔案,將下面**複製進去。
#include "dll.h"
int sum(int* a, int n)
{ int i,s=0;
for (i=0;i
在桌面建立dll.h檔案,將下面**複製進去。
#ifndef dll_h
#define dll_h
int sum(int* a, int n);
int plus(int a, int b);
#endif
在cmd中執行如下命令。
然後桌面上就會多出.o和.so檔案。
開啟canopy建立測試程式,檔名為:test.py,並將下面的**複製到test.py裡去。
# -*- coding: utf-8_ -*-
import wx
import ctypes
import sys
class myframe(wx.frame):
def __init__(self):
wx.frame.__init__(self, none, wx.id_any, 'dll example', size=(300, 200))
panel = wx.panel(self, wx.id_any)
in=wx.statictext(panel, wx.id_any, u" 輸入:")
self.intext = wx.textctrl(panel, wx.id_any, "1 2", size=(175, -1))
self.intext.setinsertionpoint(0)
out=wx.statictext(panel, wx.id_any, u" dll計算結果:")
self.outtext = wx.textctrl(panel, wx.id_any, " ", size=(175, -1))
compute=wx.button(panel, wx.id_any, u"計算", size=(50, -1))
self.bind(wx.evt_button, self.evtcompute, compute)
exit=wx.button(panel, wx.id_any, u"退出", size=(50, -1))
self.bind(wx.evt_button, self.evtexit, exit)
sizer = wx.flexgridsizer(cols=2, hgap=10, vgap=10)
sizer.addmany([in, self.intext,out, self.outtext,compute,exit])
panel.setsizer(sizer)
self.centre()
# known canopy bug: absolute filename required
self.cdll=ctypes.cdll("/home/wx/desktop/dll.so")
def evtcompute(self, event):
a=[int(x) for x in self.intext.getvalue().split()]
if len(a)==2:
result=self.cdll.plus(a[0],a[1])
else:
result=self.cdll.sum(ctypes.array(ctypes.c_int,len(a))(*a),len(a))
self.outtext.setvalue(str(result))
def evtexit(self, event): self.destroy()
if __name__ == '__main__':
# import os
# os.chdir(r"your working directory")
frame = myframe()
frame.show()
注意修改動態鏈結庫的路徑名!然後就可以執行了。
linux 下建立並動態載入 so 檔案
最簡單的生成,動態載入.so 檔案的例子 ifndef test h define test h include using namespace std void showmessage endif gcc shared fpic test.cpp o libtest.so.1.0 建立鏈結 ln ...
在windows下使用qt建立動態庫並使用
建立動態庫專案並編譯。如下 ifndef model h define model h include include if defined model library define modelshared export q decl export else define modelshared e...
Linux下建立動態庫
在linux下動態庫檔案字尾為.so,其中so代表 shared object,即共享目標檔案。動態庫的特點就是在系統記憶體中,只會存在動態庫的乙個副本。例如 程式a,b允許時都需要動態庫lib.so的支援。當a程式執行時,由於系統記憶體中沒有發現lib.so庫,所以需要載入lib.so。此時b程式...