c#调用C++的DLL找不到入口点
C++源码如下:
—————————————————a.h—————————————————
#ifdef A_EXPORTS
#define A_API __declspec(dllexport)
#else
#define A_API __declspec(dllimport)
#endif
A_API int F(void);
—————————————————a.cpp—————————————————
#include "stdafx.h"
#include "a.h"
BOOL APIENTRY DllMain( HANDLE 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;
}
A_API int F(void)
{
MessageBox(NULL, "1212", "1212", MB_OK);
return 0;
}
C#源码函数原型声明:
[DllImport("a.dll")]
public extern static int F();
调用后提示找不到入口点
在命令行用dumpbin /exports 看函数名:
dumpbin /exports a.dll
函数名不是"F"?而是"?F@@YAHXZ"
C#函数声明写成:
[DllImport("a.dll",EntryPoint="?F@@YAHXZ")]
public extern static int F();
这样调用成功!
原因:在C++函数声明时要将 extern "C" 添加在 DLL 函数声明之前
主要注意包含 DllImport 的代码行。此代码行根据参数值通知编译器,使之声明位于 User32.dll 中的函数并将签名中出现的所有字符串(如参数或返回值)视为 Unicode 字符串。如果缺少 EntryPoint 参数,则默认值为函数名。另外,由于 CharSet 参数指定 Unicode,因此公共语言运行库将首先查找称为 MessageBoxW(有 W 是因为 Unicode 规范)的函数。如果运行库未找到此函数,它将根据调用约定查找 MessageBox 以及相应的修饰名。受支持的调用约定只有 __cdecl 和 __stdcall。
当调用用户定义的 DLL 中所包含的函数时,,如下所示:
// The function declaration in SampleDLL.h file
extern "C" SAMPLEDLL_API int fnSampleDLL(void);
相关推荐
c#调用C++的DLL找不到入口点
C++源码如下: —————————————————a.h—————————————————#ifdef A_EXPORTS#define A_API __declspec(dllexport)#else#define A_API __declspec(dllimport)#endif A_API int F(void);—————————————————a.cpp——————————————...
C#调用DLL时出现的错误(个人总结向)
C#调用DLL时出现的错误前言1.环境配置问题1.1 无法加载*.dll,找不到指定的模块2.DLL程序问题2.1 无法在dll中找到入口点2.2 在C#中捕捉DLL中函数异常2.3 Invalid address specified to RtlValidateHeap2.4 DLL编译3.C#调用问题3.1 尝试读取或写入受保护的内存3.2 C# 调用dll出现托管问题3.3 参数不一致3.4 调用带传出数组函数4.其他4.1 warning C4819: 该文件包含不能在当前代码页中表示的字符4.2
System.EntryPointNotFoundException: 未发现入口点。
1.今天在把MVC3.0升级到MVC4.0的时候,运行项目,出现了这个问题。报错如下“/”应用程序中的服务器错误。 未发现入口点。 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.EntryPointNotFoundException: 未发现入口点。 源错误: 执行当前
关于DLL找不到函数入口点的问题
在隐式调用DLL时,运行时有时会出现 一个对话框。说某某函数找不到入口点。分析了一下,原因不外乎以下几种,供参考1、输入函数的DLL与LIB版本不匹配。检查一下二者是否是统一的。2、有否加载了一个库所有的“父库” 这个“父库”是我的叫法。他的意思是:当A.DLL的实现会加载B.DLL。则B.DLL为A.DLL的父库倘若我们的应用程序只需加载A.DLL,那么编译的时候是不会
无法找到c语言dll入口点,c# – 无法在DLL中找到入口点
我有一个C#应用程序,我试图将参数发送到C函数.但是,我收到了错误(在主题中提到)C#应用程序:static class SegmentationFunctions{[DllImport("MyApplication.dll", EntryPoint = "fnmain", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet...
C#调用C++类库dll,无法找到函数入口(无法在“***.dll“中找到名为“***“的入口点)
问题: 在使用C#的DllImport调用C++编写的类库dll时候,出现找不到函数入口点。 C++的dll函数名 #ifdef DLLCLASS_EXPORT #define EXT_CLASS __declspec(dllexport) #else #define EXT_CLASS _declspec(dllimport) #endif extern "C" EXT_CLASS class CBaseInterface { public: virtual int SetPara.
c#调用c++dll找不到入口点,一秒搞定
看了那么多人在网上解决这个问题。我即
C#调用C++dll文件 运行提示找不到函数的入口点
1、首先用DllAnalyzer查看dll的输出函数名,发现输出的函数名有所变化,多了@xxx和一些别的奇怪的字符,实际上是因为C++重载机制造成的,使用使用extern "C"关键字即可 2、WINAPI形式的函数在未使用DEF文件的情况下导出的名称后面会带有@xxx 形式的修饰,def文件编写完后在 连接器->输入->模块定义文件 定义一下
C#调用C语言生成的DLL“未找到入口”
自己开始采用的是第一种dll的生成方式,然后出现"未找到入口"的错误,修改为采用。.def的方法,解决了这个错误,但是出现了新的问题:“函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。”自己感觉应该是可以找到函数的入口,但是形参或者类型出现了不匹配的问题。
System.EntryPointNotFoundException:“无法在 DLL“xxxx.dll”中找到名为“yyyy”的入口点。”
方法一:检查自己的入口函数名是否填对,粗心过一次填错了 TnT 。 方法二:检验自己目录下的pmsif.dll是否是自己真实需要调用的DLL文件,使用depends.exe打开查看函数是否有自己要调用的函数入口。 我电脑上有两个DLL,一个68k,一个72k,如果没有大小区别,很难想到是引用的DLL版本不对导致无法找到函数入口点。 方法三:替换一个DLL文件,DLL文件可能已经损坏,尝试反编译,结...
C#调用非托管代码"找不到入口点"解决办法
原因:在C++函数声明时要将 extern "C" 添加在 DLL 函数声明之前。 [DllImport("a.dll")]public extern static int F();调用后提示找不到入口点 在命令行用dumpbin /exports 看函数名:,或用exeScope查看导出的接口dumpbin /exports a.dll函数名不是"F"?而是"?F@@YAHXZ"...
pdf2Image.dll丢失怎么解决?pdf2Image.dll修复工具下载
pdf2Image.dll如何修复?pdf2Image.dll是电脑内十分重要的文件,它的丢失易导致游戏、应用软件等程序运行出现错误,致使程序无法正常运行,它的解决办法也是非常简单的,只要下载好pdf2Image.dll文件,放置在对应系统的目录下面,运行补丁即可让程序正常运行它是一个电脑系统中必不可少、非常重要的dll文件,对于系统来说缺少相关文件至关重要,这时此dll文件就派上用场了若你的电脑不小心丢失了这个文件那可就麻烦了。 pdf2image.dll如何修复 1、从本站下载pdf2image.d
C#调用C DLL笔记,提示:无法在 DLL“xxx.dll”中找到名为“xxxx”的入口点
C#调用C++ dll很多,度娘一搜一大堆,还是没有解决,特写此笔记备忘 报错截图如下: 原因是C程序没有提供外部调用入口,打开.h头文件源码 如下图 C#调用C程序char数组报错:无法封送处理“return value”: 无效的托管/非托管类型组合 改为IntPtr接收 用Marshal.Copy将IntPtr转byte[] 注意:根据操作系统位数编译对应C程序的32 dll或64位dll anycpu调用报错 修改目标平台为x64 加微...
.NET-C#类库用regsvr32注册,找不到入口点的问题
C#类库用regsvr32注册,找不到入口点的问题方法!
361




被折叠的 条评论
为什么被折叠?



