【发布时间】:2015-05-14 18:39:04
【问题描述】:
我对一些从 DllImport 启动的方法有奇怪的问题。
在原生 c++ 中我有代码:
#define BUFSIZE 4096
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t *tekst = L"D:\\matiz\\Dokumenty\\!FIRMA TRIM-POT\\Firmowe";
PrintTekst(tekst);
}
bool PrintTekst(wchar_t *tekst)
{
DWORD retval = 0;
BOOL success;
TCHAR buffer[BUFSIZE] = TEXT("");
TCHAR buf[BUFSIZE];
TCHAR** lppPart = { NULL };
retval = GetFullPathNameW(tekst, BUFSIZE, buffer, lppPart);
return true;
}
bool __stdcall PrintTekstExtern(wchar_t *tekst)
{
return PrintTekst(tekst);
}
当我直接从主函数调用 PrintTekst 方法时,一切正常,但是当我使用 DllImport 调用此方法时,在线:
TCHAR buffer[BUFSIZE] = TEXT("");
我有访问冲突异常。这是很奇怪的情况,因为实际上我没有使用任何参数,在这种情况下来自管理器代码。
方法,在c#中启动:
[DllImport("Pointers.exe", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto)]
public static extern bool PrintTekstExtern(string tekst);
static void Main(string[] args)
{
string cos = @"D:\matiz\Dokumenty\visual studio 2013\Projects\Pointers\PointersSharp\bin\Debug";
var status = PrintTekstExtern(cos);
}
}
你能帮帮我吗?
【问题讨论】:
-
你为什么不把它做成一个DLL而不是exe?
-
请看这个链接它可能对你有帮助social.msdn.microsoft.com/Forums/vstudio/en-US/…
标签: c# c++ pinvoke dllimport access-violation