// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include "mfcpch.h"
#include "allheaders.h"
#include "baseapi.h"
#include "strngs.h"
#include  "params.h"
#include  "blobs.h"
#include "notdll.h"extern "C" __declspec(dllexport) int donetapi(char * imagepath,char * output, char * lang, int psm)
{
tesseract::PageSegMode pagesegmode = tesseract::PSM_AUTO; pagesegmode = static_cast<tesseract::PageSegMode>(psm); tesseract::TessBaseAPI  api; api.Init(imagepath, lang, tesseract::OEM_DEFAULT,
NULL, 0, NULL, NULL, false);

if (api.GetPageSegMode() == tesseract::PSM_SINGLE_BLOCK)
api.SetPageSegMode(pagesegmode);

FILE* fin = fopen(imagepath, "rb"); if (fin == NULL) {
return -1;
} fclose(fin); PIX   *pixs;
if ((pixs = pixRead(imagepath)) == NULL) {
return -1;
} pixDestroy(&pixs); STRING text_out;
if (!api.ProcessPages(imagepath, NULL, 0, &text_out)) {
return -1;
}

  STRING outfile = output;
     
  FILE* fout = fopen(outfile.string(), "wb");
      if (fout == NULL) {
                 return -1;
  }
 fwrite(text_out.string(), 1, text_out.length(), fout);
 fclose(fout);
     
return 0;         
}BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
 )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}============================
以上是  tesseract 开源的文字识别的软件源码里面添加的,我是把这个生成了DLL,然后在C#里面调用的。C#里面:[DllImport("tessdll.dll")]
        public unsafe static extern int donetapi(string imagepath, string output, string lang, int psm);每次调用的时候,就老是提示这个问题,尝试读取或写入受保护的内存。这通常指示其他内存已损坏。偶尔能够顺利通过。