标签: dllimport

从DLL导出全局变量

我正在尝试从DLL导出全局变量.

foo.h中

class Foo
{
public:
    Foo()
    {}
};

#ifdef PROJECT_EXPORTS
    #define API __declspec(dllexport)
#else
    #define API __declspec(dllimport)
#endif

API const Foo foo;
Run Code Online (Sandbox Code Playgroud)

Foo.cpp中

#include "Foo.h"

const Foo foo;
Run Code Online (Sandbox Code Playgroud)

当我编译上面的代码时,Visual Studio抱怨:

foo.cpp(3):错误C2370:'foo':重新定义; 不同的存储类1> foo.h(14):看'foo'的声明

如果我使用:

external const Foo foo;
Run Code Online (Sandbox Code Playgroud)

在Foo.h中,编译器很高兴,但DLL不会导出符号.我设法导出有问题的函数,但变量似乎没有相同的方式...任何想法?

c++ dll dllimport visual-studio

20
推荐指数
1
解决办法
2万
查看次数

导入PyQt5时DLL加载失败

我在Windows平台上安装了PyQt5并获得了importError:DLL加载失败.

我已经使用命令安装了pyqt5

pip3 install pyqt5
Successfully installed pyqt5-5.8.1
Run Code Online (Sandbox Code Playgroud)

我的Python版本如下:

Python 3.5.2 |Anaconda custom (64-bit)| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)] on win32
Run Code Online (Sandbox Code Playgroud)

导入错误如下:

from PyQt5.QtWidgets import QApplication
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)

感谢和问候

python dllimport importerror python-3.x pyqt5

20
推荐指数
4
解决办法
3万
查看次数

如何在DLL中使用类?

我可以在DLL中放一个类吗?我写的课是这样的:

    class SDLConsole
{
      public:
             SDLConsole();
             ~SDLConsole(){};
             void getInfo(int,int);
             void initConsole(char*, char*, SDL_Surface*, int, int, int);
             void sendMsg(char*,int, SDL_Surface*);
             void cls(SDL_Surface*);

      private:
              TTF_Font *font;
              SDL_Surface *consoleImg;
              int width, pos, height, line, size, ctLine;
              SDL_Surface* render(char*,int);

};
Run Code Online (Sandbox Code Playgroud)

我知道如何加载DLL并在DLL中使用该函数,但是如何在DLL中放置一个类?非常感谢你.

c++ class dllimport dllexport

19
推荐指数
3
解决办法
3万
查看次数

从本机dll生成C#DLLImport声明

你知道一个软件从一个本机DLL自动生成C#代码(在.cs中有[DllImport]属性),以便在C#代码中使用这个DLL吗?

c# dll native dllimport

18
推荐指数
1
解决办法
9616
查看次数

什么相当于C#中的WORD?

我正在尝试访问一个非托管库,很幸运能够访问API的综合指南.

不幸的是,我不知道C++的WORD类型是什么.同样,我不知道DWORD会是什么.

c# c++ unmanaged dllimport cpu-word

18
推荐指数
1
解决办法
2万
查看次数

Windows Defender防病毒软件从C#扫描[AccessViolation exception]

我们正在编写一个代码,使用Windows Defender API对C#中的文件进行按需扫描.

        [DllImport(@"C:\Program Files\Windows Defender\MpClient.dll")]
        public static extern int WDStatus(out bool pfEnabled);

        [DllImport(@"C:\Program Files\Windows Defender\MpClient.dll")]
        public static extern int MpManagerOpen(uint dwReserved, out IntPtr phMpHandle);

        [DllImport(@"C:\Program Files\Windows Defender\MpClient.dll")]
        public static extern int MpScanStart(IntPtr hMpHandle, uint ScanType, uint dwScanOptions, IntPtr pScanResources, IntPtr pCallbackInfo, out IntPtr phScanHandle);

        [DllImport(@"C:\Program Files\Windows Defender\MpClient.dll")]
        public static extern int MpHandleClose(IntPtr hMpHandle);

        private void DoDefenderScan_Click(object sender, EventArgs e)
        {
            try
            {
                bool pfEnabled;
                int result = WDStatus(out pfEnabled); //Returns the defender status - It's working properly.
                ErrorHandler.ThrowOnFailure(result, VSConstants.S_OK); …
Run Code Online (Sandbox Code Playgroud)

c# windows antivirus dllimport windows-defender

18
推荐指数
1
解决办法
4487
查看次数

使用dll导出类时__declspec(dllimport)的未解析外部符号

我想基于dll导出的类定义派生类.基类在项目A中定义,派生类在项目B中定义.

首先,在项目A中,定义了预处理器MYDLL_BUILD.我使用头文件来指定导出/导入:

    #if !defined(MYDLL_BUILD)
    #   pragma comment(lib, "myDll.lib")
    #endif

    #if defined(MYDLL_BUILD)
    #   define MYDLL_API __declspec(dllexport)
    #else
    #   define MYDLL_API __declspec(dllimport)
    #endif
Run Code Online (Sandbox Code Playgroud)

然后我定义基类:

class MYDLL_API DllObject
{
public:
    virtual ~DllObject() {}
protected:
    DllObject() { m_count = 3; }
private:
    int m_count;
};
Run Code Online (Sandbox Code Playgroud)

在项目B中,未定义预处理器MYDLL_BUILD.这是派生类:

class MyClass : public DllObject
{
public:
    ~MyClass(){}
    MyClass() { m_data = 20; }
private:
    int m_data;
}; 
Run Code Online (Sandbox Code Playgroud)

我已经包含了dll和lib文件,但仍然得到了未解析的外部符号错误:

2>Test_Entry.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall ADAI::DllObject::~DllObject(void)" (__imp_??1DllObject@ADAI@@UAE@XZ) referenced in function "public: virtual __thiscall …
Run Code Online (Sandbox Code Playgroud)

c++ inline dllimport dllexport visual-c++

16
推荐指数
1
解决办法
4万
查看次数

如何将Perl解释器嵌入到C#程序中

我意识到我必须DllImport使用perlembed方法

perl_parse
perl_alloc
perl_free
Run Code Online (Sandbox Code Playgroud)

等等.,

但不确定如何使用函数参数来DLLImport特别使用perl_parse方法.

我也意识到一个相关的问题已经存在,几乎存在,但OP仍然通过创建一个C包装器然后在C#中使用它来解决.

他说他无法DLLimport PERL_SYS_INIT3.

所以我的问题是如何只使用C#正确包装它们并使用它?

c# perl interop dllimport

16
推荐指数
1
解决办法
1738
查看次数

DllImport vs VB.NET中的声明

我在MSDN文档中注意到有多种方法可以在VB.NET程序中声明对外部DLL中函数的引用.

令人困惑的是,MSDN声称你只能在极少数情况下使用DllImportAttribute类和共享函数原型,但是我找不到这个语句的解释,而你可以简单地使用关键字.Declare

为什么这些不同,我会在哪里适当地使用每个案例?

vb.net dllimport declare

15
推荐指数
3
解决办法
3万
查看次数

SQLite更新后:无法在DLL"SQLite.Interop.dll"中找到名为"sqlite3_changes_interop"的入口点

我的C#/ SQLite工作正常,直到我决定更新SQLite DLL(从1.0.82.0到1.0.84.0).现在我遇到了这个崩溃:

无法在DLL"SQLite.Interop.dll"中找到名为"sqlite3_changes_interop"的入口点

A first chance exception of type 'System.EntryPointNotFoundException' occurred in System.Data.SQLite.dll
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unhandled exception</Description><AppDomain>SparkleShare.vshost.exe</AppDomain><Exception><ExceptionType>System.EntryPointNotFoundException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Unable to find an entry point named 'sqlite3_changes_interop' in DLL 'SQLite.Interop.dll'.</Message><StackTrace>   at System.Data.SQLite.UnsafeNativeMethods.sqlite3_changes_interop(IntPtr db)
   at System.Data.SQLite.SQLite3.get_Changes()
   at System.Data.SQLite.SQLiteStatement.TryGetChanges(Int32&amp;amp; changes)
   at System.Data.SQLite.SQLiteDataReader.NextResult()
   at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
   at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)

代码没有改变,所以我不认为这是一个代码问题(无论如何,这它发生的行).

我下载的新版本有什么问题吗?我在http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wikisqlite-netFx40-static-binary-Win32-2010-1.0.84.0.zipPrecompiled Statically-Linked Binaries for 32-bit Windows (.NET Framework 4.0)段落中下载了

编辑:我恢复到以前的DLL,但问题仍然发生,可能是因为Visual C#在某处无法清理某些缓存.

c# sqlite dll dllimport system.data.sqlite

15
推荐指数
1
解决办法
7580
查看次数