草庐IT

DllImport

全部标签

c# - 通过 DllImport 调用非托管函数时堆损坏

我正在使用C#应用程序中用C/C++编写的非托管dll。我有兴趣使用dll中的以下函数:staticvoidStorePath(conststd::string&path,wchar_t*out_path,int*out_path_length){wcslcpy(out_path,c_str_w(path),*out_path_length);*out_path_length=path.size();}intWINAPIBrowseForDirectory(intallow_portable,intallow_online,wchar_t*t_directory,int*e_direc

c# - 使用DLLImport时,dll文件应该放在哪里?

我知道在Windows窗体中你只需要将文件放在Debug文件夹中,但它似乎在monodevforandroid中完全不同。我试过从Assets文件夹中放置文件、添加引用路径、从项目设置中设置引用文件夹等,但我仍然没有任何运气。我总是得到一个DLLNotFoundException。另外,下面是导入dll文件的代码[DllImport("testing.dll",EntryPoint="Testing_Open",ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)]publicstaticexternuintTes

c++ - Visual Studio C++ : When should I be using __declspec(dllimport)?

我对VisualStudio2005及更高版本中的DLL构建/链接有疑问。基本上我的理解和经验是这样的:为了构建一个DLL,我指定了项目属性来构建一个DLL,然后我在我想从DLL中公开公开的任何函数或成员前面加上__declspec(dllexport)。构建项目将产生一个DLL、一个库和一个可以作为API或其他东西部署的头文件。另一方面,要让您的其他已编译的可执行应用程序动态链接到DLL并使用其功能,您只需让您的可执行项目包含头文件并链接到DLL时创建的小lib文件被建。只要编译后的应用程序可以找到DLL,一切就可以了。这是我的经验,也是MicrosoftDLL构建教程如何描述MSD

同一解决方案中的 C#/C++ - DllImport 未找到 DLL

我有一个包含C++dll项目和使用它的C#项目的解决方案。问题是c++项目的构建路径在解决方案文件夹中,而c#在项目的bin文件夹中(每个嵌套有debug/release),所以DllImport找不到它们。有解决此问题的标准方法吗? 最佳答案 您应该这样做的方式是将两个项目的构建路径设置为相同的“bin”目录...最好是一个用于解决方案的路径,而不是一个项目。然后只需将所有项目构建到该文件夹​​即可。您可以从项目设置中更改它。另一种技术是对C++应用程序使用构建后步骤,将DLL复制到C#项目的文件夹。这样你实际上不会改变任何路径。

c++:不允许定义 dllimport 函数,使用 visual studio 2010 构建

我正在使用visualstudio2010构建.dll。我写了一个试验://trialDLL.h#ifndefTRIALDLL_H_#defineTRIALDLL_H_//...MyMathFuncsclassdefinitionomitted#ifdef__cplusplusextern"C"{#endif#ifdefTRIALDLL_EXPORT#defineTRIALDLL_API__declspec(dllexport)#else#defineTRIALDLL_API__declspec(dllimport)#endifTRIALDLL_APIMyMathFuncs*__std

c# - DLLimport 无法加载 dll

我在cpp中使用非托管dll,我从我的C#web项目中调用它。它在我的本地主机上运行良好,但在我的共享主机winhost上根本不起作用。当我尝试使用dll中的函数之一时会发生这种情况。我得到的错误信息是:"UnabletoloadDLL'dllTest.dll':Theapplicationhasfailedtostartbecauseitsside-by-sideconfigurationisincorrect.Pleaseseetheapplicationeventlogorusethecommand-linesxstrace.exetoolformoredetail.(Excep

c++ - dllexport/dllimport 开关的宏

#ifCOMPILING_DLL#defineDLLEXPORT__declspec(dllexport)#else#defineDLLEXPORT__declspec(dllimport)#endif我如何/在哪里定义COMPILING_DLL?看到这里:whatdoes__declspec(dllimport)reallymean?如果我不能使用相同的header,听起来好像我根本无法使用加载时动态链接? 最佳答案 另一种选择:对项目使用默认定义的本地宏。您可以在以下位置看到项目本地默认定义的宏:属性->C/C++->预处理器-

c# - 如何在 C# 中将 DLLImport 与结构作为参数一起使用?

我能找到的所有示例都使用DLLImport从C#调用C++代码来回传递整数。我可以让这些示例正常工作。我需要调用的方法将两个结构作为其导入参数,我不太清楚如何才能完成这项工作。这是我必须处理的内容:我拥有C++代码,因此我可以根据需要对其进行任何更改/添加。第三方应用程序将在启动时加载我的DLL,并期望以某种方式定义DLLExport,因此我无法真正更改正在导出的方法签名。我正在构建的C#应用程序将用作包装器,因此我可以将这个C++部分集成到我们的一些其他应用程序中,这些应用程序都是用C#编写的。我需要调用的C++方法签名如下所示DllExportintCalculate(constM

c++ - __declspec(dllimport/dllexport) 和继承

给定一个包含以下类的DLL:#defineDLLAPI__declspec(...)classDLLAPIBase{public:virtualvoidB();};classDerived:publicBase{public:virtualvoidB();virtualvoidD();};即使“DLLAPI”关键字未应用于类定义(至少,不是直接),我的“派生”类是否在dll外部可见?“D()”函数是否可见?谢谢 最佳答案 Derived类不会被您的DLL导出。类不继承导出。也将DLLAPI添加到其中。另请注意,类成员默认为私有(pr

c++ - 使用 dllimport 过程

我正在尝试编写一个dll,这是我的头文件的样子:#ifndef_DLL_H_#define_DLL_H_#ifBUILDING_DLL#defineDLLIMPORT__declspec(dllexport)#else/*NotBUILDING_DLL*/#defineDLLIMPORT__declspec(dllimport)#endif/*NotBUILDING_DLL*/DLLIMPORTvoidHelloWorld(void);#endif/*_DLL_H_*/在.cpp文件中,我包含了这个头文件,并尝试以这种方式声明一个dll导入过程:DLLIMPORTvoidHelloWo