标签: dll

库中的异常处理

以下库代码有问题吗?

try
{
    //
}
catch (Exception ex)
{
    CustomLogger.Log(ex.ToString()); //Write to log file
    throw;
}
Run Code Online (Sandbox Code Playgroud)

我在某处读过,异常处理最好留给Application

c# dll

0
推荐指数
1
解决办法
120
查看次数

为什么我不能在带有GetProcAddress的DLL中调用C++静态类工厂方法?

我正在尝试使用以下标头加载一个假设的插件:

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


class DLLIMPORT DllClass
{ 

  public:

    virtual ~DllClass(void);
    static DllClass* getPCFilter(); 
    virtual int Process(int a, int b);

  protected:

    DllClass();
};


#endif /* _DLL_H_ */
Run Code Online (Sandbox Code Playgroud)

我的主机代码:

HINSTANCE hinstDLL;
hinstDLL = LoadLibrary(L"PCFilter.dll");

if(hinstDLL)
{
    typedef DllClass*(*Factory)();
    Factory fun1;

  fun1 = (Factory)GetProcAddress(hinstDLL, "DllClass::getPCFilter");
Run Code Online (Sandbox Code Playgroud)

dll打开但GetProcAddress未找到静态工厂方法.我不应该这样做吗?

我已经尝试摆脱静态方法,而是在类声明之后,执行以下操作:

extern "C" DLLIMPORT void* getPCFilterInstance()
{
    return (void*)new DllClass();
}
Run Code Online (Sandbox Code Playgroud)

但是,在编译主机源时,链接器会抱怨:

In …
Run Code Online (Sandbox Code Playgroud)

c++ windows dll

0
推荐指数
1
解决办法
1784
查看次数

这个简单的C++ DLL在C#中不起作用

我一直在努力研究c ++中需要运行的c ++代码.我浏览了这个DLL教程,在我的c#app中使用它时遇到了麻烦.我将在下面发布所有代码.

我收到此PInvokeStackImbalance错误:'调用PInvoke函数'frmVideo :: Add'使堆栈失衡.这很可能是因为托管PInvoke签名与非托管目标签名不匹配.检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配.

凯文,一如既往地谢谢

DLLTutorial.h

#ifndef _DLL_TUTORIAL_H_
#define _DLL_TUTORIAL_H_
#include <iostream>

#if defined DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif

extern "C"
{
   DECLDIR int Add( int a, int b );
   DECLDIR void Function( void );
}

#endif
Run Code Online (Sandbox Code Playgroud)

DLLTutorial.cpp

#include <iostream>

#define DLL_EXPORT

#include "DLLTutorial.h"


extern "C"
{
   DECLDIR int Add( int a, int b )
   {
      return( a + b );
   }

   DECLDIR void Function( void )
   {
      std::cout << …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll pinvoke

0
推荐指数
1
解决办法
735
查看次数

从同一个dll调用多个函数

这可能是一个简单的..我在SO中寻找答案,无法找到我在寻找的东西,这就是为什么我在这里发布了一个问题.以下是我的疑惑,

我正在开发一个我正在使用Windows默认dll的应用程序.我正在使用来自相同加载的dll的多个函数.例如:

HINSTANCE hinstLib;
hinstLib = LoadLibrary( "Crypt32.dll" );
Run Code Online (Sandbox Code Playgroud)

然后使用下面的代码导出函数:

CertOpenStore = (fptr1)GetProcAddress(hinstLib, "CertOpenStore");
Run Code Online (Sandbox Code Playgroud)

现在我想使用同一个dll中的另一个函数.在这种情况下我如何做如上所述:

CertAddEncodedCertificateToStore(CertOpenSystemStore(0,"TrustedPublisher"),PKCS_7_ASN_ENCODING |X509_ASN_ENCODING,pbEncodedCert,dwSize,CERT_STORE_ADD_REPLACE_EXISTING,NULL);
Run Code Online (Sandbox Code Playgroud)

其中两个CertAddEncodedCertificateToStoreCertOpenSystemStore属于同一个DLL?

c windows dll winapi

0
推荐指数
1
解决办法
667
查看次数

在库项目中获取操作,控制器和区域名称

我有一个MVC3项目和一个库(.dll)项目包含了我的一些代码,所以我需要在库项目中获取区域,控制器和动作名称,我在MVC项目中使用以下行:

string areaName = (string)Request.RequestContext.RouteData.DataTokens["area"] ?? "Root";
string controllerName = (string)Request.RequestContext.RouteData.Values["controller"];
string actionName = (string)Request.RequestContext.RouteData.Values["action"];
Run Code Online (Sandbox Code Playgroud)

但是在库项目中Request,我添加时无法访问任何对象using System.Web.Mvc;

public static void GetNames(){

  //string areaName = (string)Request.RequestContext.RouteData.DataTokens["area"] ?? "Root";
  //string controllerName = (string)Request.RequestContext.RouteData.Values["controller"];
  //string actionName = (string)Request.RequestContext.RouteData.Values["action"];

}
Run Code Online (Sandbox Code Playgroud)

那么,我怎样才能在图书馆项目中获得这个名字?

dll asp.net-mvc asp.net-mvc-3

0
推荐指数
1
解决办法
2624
查看次数

隐藏除了另一个特定程序集之外的所有内容

我有两个类库"MyLibrary.dll"和"MyLibraryEditor.dll"用于Unity运行时和编辑器扩展."MyLibrary.dll"中有几个类成员仅供"MyLibraryEditor.dll"使用.

我的第一个想法是使用internal关键字,因为我错误地认为这限制了命名空间的可见性.相反,很明显,此关键字限制了程序集的可见性.

在不损害性能的情况下,将对某些类成员的访问限制为"MyLibrary.dll"和"MyLibraryEditor.dll"的最佳方法是什么?此外,反思不是一种选择.

我很高兴根本不记录这些功能,但不幸的是,Intellisense(和MonoDevelop的等价物)展示了这些成员.

c# dll mono unity-container monodevelop

0
推荐指数
1
解决办法
567
查看次数

Visual Studio,.dll未找到(从未被要求)

我告诉Visual Studio额外的库目录,并在额外的依赖项中编写了.lib.(是的,.lib,而不是.dll).然后所有外部符号文件错误都消失了(之前有一些错误),但接下来是:

实际名称和我对其他依赖项的说法是:assimp.lib

但是当我运行该程序时,它说:找不到依赖的dll,并在消息框中显示Assimp32.dll

而且我从来没有说过要包含一个dll名称,特别是那个名字,所以我很困惑,如果我犯了错误,我已经多次检查过,但似乎不是.

c++ dll visual-studio

0
推荐指数
1
解决办法
2847
查看次数

在VB.NET项目中添加DLL的更好方法

我想在VB项目中使用C编写的DLL,以便将DLL复制到输出目录.我之前在这里提出了这个问题并得到了一个很好的答案: 使用C DLL的VB.Net 所有你要做的就是转到Project菜单和"Add Existing Item".如果将DLL的任何更新复制到项目文件夹中,则此方法很有用.现在我有一个新项目,我将我的C项目文件夹放在Visual Basic项目文件夹中,希望Visual Basic从该文件夹中获取DLL并将其复制到输出目录.哦不,他们永远不会那么容易.添加现有项目会将该文件复制到项目文件夹.所以现在它总是获取DLL的旧副本,除非我手动修复它,我不想这样做.如何使Visual Basic符合我的意愿?

c vb.net dll

0
推荐指数
1
解决办法
4530
查看次数

这个字符串格式在C++中意味着什么?

好吧,这可能是我曾经问过的一个不那么聪明的问题.可悲的是,谷歌让我没有回答(堆栈也没有).

在C++ DLL文件中,我有这一行:

pSDB->setString("Logger\\AppLogger\\fileLoggerFilename", "rfa.{P}.log")

在我的生命中,我无法找出{P}准确代表的东西.在目录中,我将获得如下所示的日志:'rfa.6702.log','rfa.6829.log'或'rfa.7024.log'.

我注意到它们在不断增加.这是否合法地表示C++中的任何内容,或者只是代码中的参数集?

编辑:

此代码涉及路透社的连接.该pSDB方法是:

"rfa :: config :: StagingConfigDatabase*ConnectionManager"

c++ dll formatting reuters

0
推荐指数
1
解决办法
230
查看次数

int to unknown to double conversion issue

我创建了一个程序来读取/写入来自另一个程序的数据.我在程序中设置了一个值7(类型为memory real),然后当我在visual studio中读取它时,它给了我一个字符串7.0000000000000.所以我创建了这个转换片段,它适用于int类型的数据,它也在VS中给我一个字符串.我不知道这两种数据类型之间的区别,但逻辑上如果两种数据类型都给我一个字符串,我应该能够运行这段代码.为什么内存真实数据会跳过这里?

 if (Regex.IsMatch(value, "^[0-9 ]+$"))
                {
                    ValueBox.Text = Double.Parse(value).ToString();
                }
                else
                {
                    ValueBox.Text = value;
                }
Run Code Online (Sandbox Code Playgroud)

编辑:我使用2个给定的dll,我相信在dll中存在转换问题,但我的代码仍然有效.

编辑2:此代码是我的程序的一部分,值和其他变量已经定义

.net c# dll user-interface type-conversion

0
推荐指数
1
解决办法
114
查看次数