我想在我的C#.net应用程序中使用本机Dll,如下所示:
public const int WFSDDESCRIPTION_LEN = 256;
public const int WFSDSYSSTATUS_LEN = 256;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Auto)]
public struct LPWFSVERSION
{
[MarshalAs(UnmanagedType.U4, SizeConst = 4)]
int WVersion;
[MarshalAs(UnmanagedType.U4, SizeConst = 4)]
int WLowVersion;
[MarshalAs(UnmanagedType.U4, SizeConst = 4)]
uint WHighVerion;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = WFSDDESCRIPTION_LEN + 1)]
public string szDescription;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = WFSDSYSSTATUS_LEN + 1)]
public string szSystemStatus;
}
[DllImport("MSXFS.DLL", EntryPoint = "WFSStartUP", CharSet = CharSet.Auto, ExactSpelling = false)]
public static extern int WFSStartUP([MarshalAs(UnmanagedType.U4)]int dwVersionsRequired, ref LPWFSVERSION ver); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用LEADTOOLS成像库,他们有一大堆需要引用的dll.设置我们的设计方式我们有一个核心库,我们所有的项目都是基于的,LEADTOOLS需要的所有DLL都加载到我们的基础库中,并且它们被复制到本地的构建路径,但是当我们使用它们时我们的子项目只在本地复制了一些DLL(LeadTools.Codecs.dll和LeadTools.dll是特定的).
两个dll之间的设置没有区别,45个没有.我需要做些什么才能让那些编解码器dll过来在本地复制?
参考清单的上半部分

参考清单和第二个项目的底部

核心输出目录

第二个项目的输出目录

这是csproj文件中的ItemGroup部分.
<ItemGroup>
<Reference Include="Leadtools, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=AMD64">
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files (x86)\LEAD Technologies\LEADTOOLS Imaging 16.5\Redist\DotNet\x64\Leadtools.dll</HintPath>
</Reference>
<Reference Include="Leadtools.Codecs, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=AMD64">
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files (x86)\LEAD Technologies\LEADTOOLS Imaging 16.5\Redist\DotNet\x64\Leadtools.Codecs.dll</HintPath>
</Reference>
<Reference Include="Leadtools.Codecs.Abc">
<HintPath>C:\Program Files (x86)\LEAD Technologies\LEADTOOLS Imaging 16.5\Redist\DotNet\x64\Leadtools.Codecs.Abc.dll</HintPath>
</Reference>
<Reference Include="Leadtools.Codecs.Ani">
<HintPath>C:\Program Files (x86)\LEAD Technologies\LEADTOOLS Imaging 16.5\Redist\DotNet\x64\Leadtools.Codecs.Ani.dll</HintPath>
</Reference>
<Reference Include="Leadtools.Codecs.Bmp">
<HintPath>C:\Program Files (x86)\LEAD Technologies\LEADTOOLS Imaging 16.5\Redist\DotNet\x64\Leadtools.Codecs.Bmp.dll</HintPath>
</Reference>
<Reference Include="Leadtools.Codecs.Cal">
<HintPath>C:\Program Files (x86)\LEAD Technologies\LEADTOOLS Imaging 16.5\Redist\DotNet\x64\Leadtools.Codecs.Cal.dll</HintPath>
</Reference>
<Reference Include="Leadtools.Codecs.Clp">
<HintPath>C:\Program Files (x86)\LEAD Technologies\LEADTOOLS Imaging 16.5\Redist\DotNet\x64\Leadtools.Codecs.Clp.dll</HintPath> …Run Code Online (Sandbox Code Playgroud) 我有一些代码创建了对vb6 dll的引用,并使用该引用来调用该对象.我遇到了问题,因为在Debug和我的机器上它运行良好.但是,当我将它部署到服务器,这是一个Windows 2008 64服务器,它不起作用.
我收到此错误:"由于以下错误,检索具有CLSID {C259F578-EC04-4C0F-A13B-AA440F13CB73}的组件的COM类工厂失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))."
这是我的代码.
ClasstoInstantiate = ExportObject
If UCase(pRow("TypeVB6").ToString()) = "TRUE" Then
classType = Type.GetTypeFromProgID(ClasstoInstantiate, True)
Else
classType = Type.GetType(ClasstoInstantiate, True)
End If
Dim o As Object = Activator.CreateInstance(classType)
Run Code Online (Sandbox Code Playgroud) 我有问题要问.
我有一个用于在USB上读写数据的dll文件.要在VB.Net中使用dll,需要集成.vb文件,该文件与该dll文件的接口使用其功能,属性等.
我需要的是在C#项目中使用这个DLL.这可能吗?如果是的话,我该如何实现呢?
表格中的代码类:
Public Class frmUSB
' vendor and product IDs
Private Const VendorID As Integer = &H1234 'Replace with your device's
Private Const ProductID As Integer = &H1234 'product and vendor IDs
' read and write buffers
Private Const BufferInSize As Integer = 1 'Size of the data buffer coming IN to the PC
Private Const BufferOutSize As Integer = 1 'Size of the data buffer going OUT from the PC
Dim BufferIn(BufferInSize) As Byte 'Received data will …Run Code Online (Sandbox Code Playgroud) 我有一个用C++编写的程序,其主函数调用了许多其他C++类/函数.
我是C++的新手(曾经是python程序员),所以我想知道 - 为了能够将它导出为可从C#程序导入的DLL,我需要遵循哪些步骤?有什么建议?
假设我有一个名为MyDll.dll的dll
它位于d:\ MyWorks\MyDll.dll [它是directshow dll]
我想从MyDll代码中获取其位置的路径.
我使用了boost: FileSystem
string path = "";
boost::filesystem::path full_path( boost::filesystem::current_path() );
path = full_path.string();
Run Code Online (Sandbox Code Playgroud)
但这给了我它的执行路径,即C:\ Windows\system32,而不是它的位置路径,即d:\ MyWorks\MyDll.dll.
如何在同一个dll中获取dll的位置?
更新:通过获取模块:
TCHAR path[2048];
GetModuleFileName( NULL, path, 2048 );
ostringstream file;
file << path ;
string const pathString =file.str();
cout << "Path: " << pathString << endl;
Run Code Online (Sandbox Code Playgroud)
给我一个十六进制的字符串:0049EA95 ....
在上一个问题之后,我发布并收到了一个很好的答案 -
我还有其他问题.我必须在某个地方出错,但我很确定我正确地构建了.DLL,并且我确信从之前回答的问题它正确链接到.DLL.
我有以下内容:
我还使用了DependencyWalker来确保.DLL正在导出我试图调用的函数,并且它显示正在正确导出它.
PS:我在编译调用.dll的程序时收到错误,其中"导出的函数未在此范围内声明"错误.
感谢您的时间和帮助!
对于一堆DLL,我将特定版本设置为False作为对C#控制台项目的引用.我知道这是一个编译时检查.
那么如何在运行时允许以前版本的DLL呢?
谢谢!
我有一个问题.我已经制定了解决方案,它是3层应用程序.所以我有3个项目是类库,一个是windows表单应用程序,它将使用我启动所有这些并将它们连接在一起.问题是我有数据层app.config文件.如果我把它放在那个dll中那么我就读不懂了.如果我把它放在主程序(Windows窗体应用程序)中,我仍然无法读取它.
所以我的问题是放置app.config文件的位置,以便我能正常阅读?我正在从DLL中读取它.它必须是这样的,因为它是3.tier应用程序,所有层都是自己的.所以一个是数据层,商务逻辑和表示层.
请帮忙.
编辑:
好的,我会传递一些代码:
所以我从数据层app.config文件中读取如下:
SqlConnection konekcija = new SqlConnection(ConfigurationManager.AppSettings["skripta"]);
Run Code Online (Sandbox Code Playgroud)
该类库项目中的app.config文件是:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
<appSettings>
<add key="skripta"
value="Data Source=DENONTH-PC;Initial Catalog=rups;Integrated Security=True;Pooling=False" />
</appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我在该类librabry和Windows窗体项目中有app.config,但仍然没有正确引用它.
我有一个DLL,我已经包含在我的C#项目中.我们称之为"one.dll"这个DLL包含一个名为"staticclass"的静态类
我有另一个DLL,我也包含在同一个项目中.我们称之为"two.dll"这个DLL还包含一个名为"staticclass"的静态类
现在当我在我的项目中同时包含两个DLL并尝试访问"staticclass"时,自然它会给出错误.有没有办法我可以更改类的名称或给它一些别名,所以让我们说"one.dll"中的"staticclass"将保持原样,我可以给"staticclassTwo"别名,这是"两个" .DLL"
请注意我无法访问"one.dll"和"two.dll"的源编解码器