问题列表 - 第9806页

在没有类型库的情况下使用C#中的COM dll

我需要使用很久以前在Delphi中开发的COM组件(dll).问题是:dll不包含类型库...并且.NET中的每个互操作功能(例如,TlbImp)似乎都依赖于TLB.这个组件已经在Delphi程序中使用了很多年没有问题,因为"使用Delphi的COM对象并不是什么问题,因为我们知道接口"(引用Delphi开发人员).

有没有办法在没有TLB的情况下从c#中使用这个DLL?我已经使用DLL作为未试过,但唯一的方法是出口DllUnregisterServer,DllRegisterServer,DllCanUnloadNowDllGetClassObject.我知道我将要使用的类和函数的名称,如果这可以有任何帮助.

更新: 我已经尝试过实施Jeff的建议,但是我收到了这个错误:

"无法将'ComTest.ResSrvDll'类型的COM对象强制转换为接口类型'ComTest.IResSrvDll'.此操作失败,因为对于具有IID'{75400500-939F-11D4-9E44-0050040CE72C}的接口的COM组件上的QueryInterface调用'由于以下错误而失败:不支持此类接口(来自HRESULT的异常:0x80004002(E_NOINTERFACE))."

这就是我所做的:

我从其中一个Delphi人那里得到了这个接口定义:

unit ResSrvDllIf;

interface

type
   IResSrvDll = interface
   ['{75400500-939F-11D4-9E44-0050040CE72C}']
    procedure clearAll;

    function  ResObjOpen(const aClientID: WideString; const aClientSubID: WideString;
                         const aResFileName: WideString; aResShared: Integer): Integer; {safecall;}
    ...
   end;
implementation
end.
Run Code Online (Sandbox Code Playgroud)

从这个我做了这个界面

using System.Runtime.InteropServices;
namespace ComTest
{
    [ComImport]
    [Guid("75400500-939F-11D4-9E44-0050040CE72C")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IResSrvDll
    {
        int ResObjOpen(string aClientID, string aClientSubID, string aResFileName, int aResShared);

    }
}
Run Code Online (Sandbox Code Playgroud)

而这个coclass(得到了德尔福人的指导)

using System.Runtime.InteropServices;

namespace ComTest
{
    [ComImport]
    [Guid("75400503-939F-11D4-9E44-0050040CE72C")]
    public class ResSrvDll
    {
    } …
Run Code Online (Sandbox Code Playgroud)

c# delphi com interop

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

仅在给定Type实例的情况下从MEF容器导出

我有一个场景,我必须从我的CompositionContainer实例导出,但我只有一个类型可以使用; 我不知道编译时的类型,因此我无法以通常的通用方式检索导出的对象.

通常你会这样做:

_container.GetExportedObject<IMyType>();
Run Code Online (Sandbox Code Playgroud)

但就我而言,我有这个:

Type someType = ... ;
_container.HowDoIGetTheExport(someType);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# mef

12
推荐指数
1
解决办法
7321
查看次数

C#:线程安全事件

下面的实现是否是线程安全的?如果不是我错过了什么?我应该在volatile某个地方有关键字吗?或者在OnProcessingCompleted方法的某个地方锁定?如果是的话,在哪里?

public abstract class ProcessBase : IProcess
{
    private readonly object completedEventLock = new object();

    private event EventHandler<ProcessCompletedEventArgs> ProcessCompleted;

    event EventHandler<ProcessCompletedEventArgs> IProcess.ProcessCompleted
    {
        add
        {
            lock (completedEventLock)
                ProcessCompleted += value;
        }
        remove
        {
            lock (completedEventLock)
                ProcessCompleted -= value;
        }
    }

    protected void OnProcessingCompleted(ProcessCompletedEventArgs e)
    {
        EventHandler<ProcessCompletedEventArgs> handler = ProcessCompleted;
        if (handler != null)
            handler(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我有私有事件和显式接口的原因是因为它是一个抽象基类.从它继承的类不应该直接对该事件做任何事情.添加了类包装器,使其更清晰=)

c# events multithreading event-handling thread-safety

5
推荐指数
2
解决办法
5578
查看次数

Windows Service应用程序是正确的方法

我目前有一个自动化的Windows应用程序,每天运行.目的是访问webservice以下载数据集,插入到sql 2005数据库中.

Windows服务应用程序是否适用于这种情况,是否会更灵活,并且性能会更好.

.net sql automation web-services

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

如何强制在父窗口中打开iframe的链接

我需要在同一个父页面中打开链接,而不是在新页面中打开它.

注意:iframe和父页面是同一个域.

html iframe hyperlink html-target

340
推荐指数
9
解决办法
44万
查看次数

我可以将属性应用于继承的成员吗?

假设我有以下(简单的简单)基类:

public class Simple
{
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我现在想要做以下事情:

public class PathValue : Simple
{
    [XmlAttribute("path")]
    public string Value { get; set; }
}

public class ObjectValue : Simple
{
    [XmlAttribute("object")]
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但实际上没有重新定义财产.我想将属性应用于基类的成员.这可能吗?

真正的问题是,在我从/到XML的序列化机制(它工作得非常出色),我发现很多类似的元素只有属性的名称不同(它们不一致,我不控制格式).现在我需要为每个这样的元素创建一个不同的类,而它们就像100%相同(除了属性).

我不认为这是可能的,但你可能永远不会知道.

更新:

我试过Marc的方法,但无济于事:

public class Document
{
    public PathValue Path;
    public ObjectValue Object;
}

class Program
{
    static void Main(string[] args)
    {
        var doc = new Document()
        {
            Path = new PathValue() { Value …
Run Code Online (Sandbox Code Playgroud)

c# attributes xml-serialization

8
推荐指数
1
解决办法
1395
查看次数

Django ORM:查询两个模型

我有2个模型我使用这个模型在评论中显示头像.

django_comments:

user_id
comment
.....
Run Code Online (Sandbox Code Playgroud)

myapp_profile

user_id
image_path
......
Run Code Online (Sandbox Code Playgroud)

其实我正在用cursor.execute()进行原始查询,以获取此数据

 -------   ----------   -------  
'user_id' 'image_path' 'comment'  
 -------   ----------   -------  
   3       name.jpg       test 
Run Code Online (Sandbox Code Playgroud)

但我想用"django orm方式"做

有解决方案吗

谢谢

django orm

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

在C#ASP.net中将ALPHA-2转换为ALPHA-3

是否有快速内置的方法将ALPHA-2(GB)转换为C#中的ALPHA-3(GBR),而无需创建所有数组.

c# asp.net country-codes

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

打破长篇文章

我有一个宽度为200px的div.它不显示水平滚动条.现在,如果有人输入任何超过200px的单词,它就会被隐藏起来.我想知道是否可以在每个单词达到200px长度后自动添加换行符?

感谢您的时间.

javascript

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

我可以在INSERT值中使用SELECT语句吗?

我试过这个:

INSERT  INTO tbl_vaucher
        (
          vaucher_name,
          created_date
        )
VALUES  (
          ( SELECT TOP 1
                    con_full_name
            FROM    tbl_contact
          ),
          GETDATE()
        )
Run Code Online (Sandbox Code Playgroud)

,得到:Subqueries are not allowed in this context. Only scalar expressions are allowed.

我需要一个没有功能的解决方案.

sql t-sql performance sql-server-2005

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