私はdllを操作し、さまざまなファイルをリンクするのが非常に初心者です。
main() 関数と他のすべてを同じ .c ファイルに書き込んで実行することを知っています。
パターンマッチングに役立つプログラムが1つあります。文字列を取得し、テキスト文字列全体に存在するかどうかを確認します。お気に入り
テキスト文字列: 私の名前はジョンです
照合する文字列: 名前
答え: はい
主な機能は次のとおりです。
int main(int argc, const char *argv[])
{
char target[200];
char *ch = target;
char pattern[20];
int i,k,count,l;
printf("\nEnter the string: \n");
fgets(target,100,stdin);
printf("Enter the string to be matched: \n");
fgets(pattern,20,stdin);
l=strlen(pattern);
i = kmp(target, strlen(target)-1, pattern, strlen(pattern)-1);
//printf("I is : %d\n",i);
if (i == -1)
puts("False");
else
puts("True");
getch();
return 0;
}
関数 kmp() を呼び出して結果を取得します。kmp() 関数で結果を出力することもできます。kmp() 関数は次のとおりです。
int kmp(char *target, int tsize, char *pattern, int psize)
{
int i;
int *pi = compute_prefix_function(pattern, psize);
int k = -1;
if (!pi)
return -1;
for (i = 0; i < tsize; i++) {
while (k > -1 && pattern[k+1] != target[i])
k = pi[k];
if (target[i] == pattern[k+1])
k++;
if (k == psize - 1) {
free(pi);
return i-k;
}
}
free(pi);
return -1;
}
kmpでは、compute_prefix_function(pattern, psize) を呼び出します。以下のとおりです。
int *compute_prefix_function(char *pattern, int psize)
{
int k = -1;
int i = 1;
int *pi = malloc(sizeof(int)*psize);
if (!pi)
return NULL;
pi[0] = k;
for (i = 1; i < psize; i++) {
while (k > -1 && pattern[k+1] != pattern[i])
k = pi[k];
if (pattern[i] == pattern[k+1])
k++;
pi[i] = k;
}
return pi;
}
ヘッダー ファイルを呼び出す必要があります。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
私がやりたいことは次のとおりです。
dll/共有ライブラリ形式で実装を作成します。基本的に、dll には、文字列を受け取り、文字列が存在するかどうかを示す bool を返す関数拡張が必要です。
そのために、どの関数を .c ファイルとヘッダー ファイルに入れる必要があり、このために .dll ファイルを作成する方法を教えてください。
Windows 7、VS 2010、および C プログラミングを使用しています。
順を追って説明してください。