Windows で DLL を使う

最終更新:2009/09/25

sub.h

001: #include <stdio.h>
002: __declspec(dllexport) int sub(int arg);
sub.c
001: #include <stdio.h>
002: 
003: #include "sub.h"
004: 
005: int sub(int arg)
006: {
007:     printf("sub %d\n", arg);
008:     return arg + 1;
009: }
010: 
sub.mak
001: # DLL 作成サンプル Makefile (nmake 用)
002: # 実行例:
003: # nmake -f sub.mak
004: 
005: # ディレクトリ
006: INC_DIR=.
007: 
008: # フラグ設定
009: CFLAG=/nologo /W3 /DWIN32 $(CFLAG) /I $(INC_DIR)
010: 
011: .SUFFIXES: .c .obj .exe
012: 
013: all:	sub.dll
014: 
015: clean:	cleanup
016: 
017: cleanup:
018: 	del *.exe *.obj *.dll *.lib *.exp *.bak
019: 
020: .c.obj:
021: 	$(CC) /c /Fo$@ $< $(CFLAG)
022: 
023: sub.obj:	sub.h
024: 
025: sub.dll:	sub.obj
026: 	$(CC) /LD /Fo$@ sub.obj
027: 
main.c
001: #include <stdio.h>
002: #include "sub.h"
003: 
004: int main(int argc, char** argv)
005: {
006:     printf("main %d\n", sub(1));
007:     return 0;
008: }
009: 
main.mak
001: # DLL 利用サンプル Makefile (nmake 用)
002: # 実行例:
003: # nmake -f main.mak
004: 
005: # コマンド
006: MT=mt
007: 
008: # ディレクトリ
009: LIB_DIR=.
010: INC_DIR=.
011: 
012: # ライブラリ
013: LIBS=$(LIB_DIR)\sub.lib
014: 
015: # フラグ設定
016: CFLAG=/nologo /W3 /DWIN32 $(CFLAG) /I $(INC_DIR)
017: LINKFLAG=/nologo /link $(LIBS)
018: 
019: .SUFFIXES: .c .obj .exe
020: 
021: all:	main.exe
022: 
023: clean:	cleanup
024: 
025: cleanup:
026: 	del *.exe *.obj *.exp *.bak
027: 
028: .c.obj:
029: 	$(CC) /c /Fo$@ $< $(CFLAG)
030: 
031: main.obj:	sub.h
032: 
033: main.exe:	main.obj sub.lib
034: 	$(CC) /Fe$@ main.obj $(LINKFLAG)
035: 	IF EXIST $@.manifest $(MT) -manifest $@.manifest -outputresource:$@