以下库代码有问题吗?
try
{
//
}
catch (Exception ex)
{
CustomLogger.Log(ex.ToString()); //Write to log file
throw;
}
Run Code Online (Sandbox Code Playgroud)
我在某处读过,异常处理最好留给Application
我正在尝试使用以下标头加载一个假设的插件:
#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 ++中需要运行的c ++代码.我浏览了这个DLL教程,在我的c#app中使用它时遇到了麻烦.我将在下面发布所有代码.
我收到此PInvokeStackImbalance错误:'调用PInvoke函数'frmVideo :: Add'使堆栈失衡.这很可能是因为托管PInvoke签名与非托管目标签名不匹配.检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配.
凯文,一如既往地谢谢
#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)
#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) 这可能是一个简单的..我在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)
其中两个CertAddEncodedCertificateToStore与CertOpenSystemStore属于同一个DLL?
我有一个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)
那么,我怎样才能在图书馆项目中获得这个名字?
我有两个类库"MyLibrary.dll"和"MyLibraryEditor.dll"用于Unity运行时和编辑器扩展."MyLibrary.dll"中有几个类成员仅供"MyLibraryEditor.dll"使用.
我的第一个想法是使用internal关键字,因为我错误地认为这限制了命名空间的可见性.相反,很明显,此关键字限制了程序集的可见性.
在不损害性能的情况下,将对某些类成员的访问限制为"MyLibrary.dll"和"MyLibraryEditor.dll"的最佳方法是什么?此外,反思不是一种选择.
我很高兴根本不记录这些功能,但不幸的是,Intellisense(和MonoDevelop的等价物)展示了这些成员.
我告诉Visual Studio额外的库目录,并在额外的依赖项中编写了.lib.(是的,.lib,而不是.dll).然后所有外部符号文件错误都消失了(之前有一些错误),但接下来是:
实际名称和我对其他依赖项的说法是:assimp.lib
但是当我运行该程序时,它说:找不到依赖的dll,并在消息框中显示Assimp32.dll
而且我从来没有说过要包含一个dll名称,特别是那个名字,所以我很困惑,如果我犯了错误,我已经多次检查过,但似乎不是.
我想在VB项目中使用C编写的DLL,以便将DLL复制到输出目录.我之前在这里提出了这个问题并得到了一个很好的答案: 使用C DLL的VB.Net 所有你要做的就是转到Project菜单和"Add Existing Item".如果将DLL的任何更新复制到项目文件夹中,则此方法很有用.现在我有一个新项目,我将我的C项目文件夹放在Visual Basic项目文件夹中,希望Visual Basic从该文件夹中获取DLL并将其复制到输出目录.哦不,他们永远不会那么容易.添加现有项目会将该文件复制到项目文件夹.所以现在它总是获取DLL的旧副本,除非我手动修复它,我不想这样做.如何使Visual Basic符合我的意愿?
好吧,这可能是我曾经问过的一个不那么聪明的问题.可悲的是,谷歌让我没有回答(堆栈也没有).
在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"
我创建了一个程序来读取/写入来自另一个程序的数据.我在程序中设置了一个值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:此代码是我的程序的一部分,值和其他变量已经定义
dll ×10
c# ×4
c++ ×4
c ×2
windows ×2
.net ×1
asp.net-mvc ×1
formatting ×1
mono ×1
monodevelop ×1
pinvoke ×1
reuters ×1
vb.net ×1
winapi ×1