小编agf*_*agf的帖子

为什么我不能使用__declspec(dllexport)从COM DLL导出DllGetClassObject()?

我正在开发一个COM DLL并尝试使用__declspec(dllexport)导出DllGetClassObject()方法.

这里是我的报关表:

extern "C" HRESULT __declspec(dllexport) __stdcall DllGetClassObject(REFCLSID rclsid, 
                                                             REFIID riid, void** ppv)
Run Code Online (Sandbox Code Playgroud)

但我一直得到这个错误:

error C2375: 'DllGetClassObject' : redefinition; different linkage
Run Code Online (Sandbox Code Playgroud)

所以我尝试检查所有DllGetClassObject定义的出现.于是在ObjBase.h中找到了以下一个.

STDAPI  DllGetClassObject(__in REFCLSID rclsid, __in REFIID riid, __deref_out LPVOID FAR* ppv);
Run Code Online (Sandbox Code Playgroud)

事实证明,STDAPI是这样的:

#define STDAPI                  EXTERN_C HRESULT STDAPICALLTYPE
Run Code Online (Sandbox Code Playgroud)

换句话说,它是这样的:

#define STDAPI                  extern "C" HRESULT __stdcall
Run Code Online (Sandbox Code Playgroud)

根据MSDN:

要导出函数,如果指定了关键字,__ declspec(dllexport)关键字必须出现在calling-convention关键字的左侧.

但我之前提到的声明没有奏效.

那么COM DLL 必须def文件导出他们的方法吗?


更新1

我用不同的方法名称测试了我的声明,如下所示:

extern "C" HRESULT __declspec(dllexport) __stdcall f()
{
    return S_OK;
}
Run Code Online (Sandbox Code Playgroud)

并且此方法已成功导出.所以这些说明符可以一起使用.似乎Visual C++编译器将STDAPIextern"C"HRESULT …

c++ com name-decoration

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

如何覆盖键盘中断?(蟒蛇)

无论如何,Ctrl+c当脚本运行时,我可以让我的脚本执行我的一个函数吗?

python signals interrupt

9
推荐指数
2
解决办法
9482
查看次数

python何时使用copy.copy

我想我已经开始理解python了,但是我仍然遇到一个基本问题.什么时候用copy.copy

>>>a=5
>>>b=a
>>>a=6
>>>print b
5
Run Code Online (Sandbox Code Playgroud)

好有意义.但在什么情况下说b=aa和b之间形成某种"链接",以便修改a会修改b?这是我没有得到的copy.copy- 每次使用等号将一个变量分配给另一个变量时,只需复制该值吗?

python

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

循环的Python用时间减慢

所以我在处理Python中的for循环时遇到了一些麻烦 - 据我所知,随着时间的推移,它们会越来越慢.我在一个范围内循环,随着时间的推移,循环显着减慢.如果重要的话,这是在游戏引擎内部完成的.谁能告诉我这是什么问题?

这是一个简单的例子.

for x in range(xs): # xs, ys, and zs are all pre-determined size values

     for z in range(zs):

          for y in range(ys):

              vp = [x * vs, y * vs, z * vs]

              v = Cube(vp)
Run Code Online (Sandbox Code Playgroud)

这个过程的初始速度很好,但随着时间的推移,循环速度变慢.我知道它不是游戏引擎的Rasterizer,因为当循环完成时,引擎的其余部分以60 FPS运行.那可能是什么问题呢?

编辑:我使用的是Python 3,所以没有xrange.

编辑2:对于此示例,vs为1.0,并且xs,ys和zs的预定大小值均为20.

python performance for-loop range python-3.x

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

Struct.Error,必须是字节对象?

我正在尝试执行代码:

    values = (1, 'ab', 2.7)    
    s.struct.Struct('I 2s f')
    packed = s.pack(*values)
Run Code Online (Sandbox Code Playgroud)

但我一直收到错误:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    struct.error: argument for 's' must be a bytes object
Run Code Online (Sandbox Code Playgroud)

为什么?我该如何解决?

python python-3.x

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

在Python中计算累积密度函数的导数

是否存在累积密度函数的精确导数是概率密度函数(PDF)?我正在使用计算导数numpy.diff(),这是正确的吗?见下面的代码:

import scipy.stats as s
import matplotlib.pyplot as plt
import numpy as np

wei = s.weibull_min(2, 0, 2) # shape, loc, scale - creates weibull object
sample = wei.rvs(1000)
shape, loc, scale = s.weibull_min.fit(sample, floc=0) 

x = np.linspace(np.min(sample), np.max(sample))

plt.hist(sample, normed=True, fc="none", ec="grey", label="frequency")
plt.plot(x, wei.cdf(x), label="cdf")
plt.plot(x, wei.pdf(x), label="pdf")
plt.plot(x[1:], np.diff(wei.cdf(x)), label="derivative")
plt.legend(loc=1)
plt.show()
Run Code Online (Sandbox Code Playgroud)

CDF,PDF和衍生品的比较

如果是这样,我如何缩放衍生物以等同于PDF?

python statistics numpy scipy probability-density

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

管道postgres使用psycopg2在python中复制COPY

我正在编写一个脚本,使用psycopg2在同一网络上的两台机器之间复制一些数据.我正在用一些旧的,丑陋的bash替换副本

psql -c -h remote.host "COPY table TO STDOUT" | psql -c "COPY table FROM STDIN"
Run Code Online (Sandbox Code Playgroud)

这似乎是最简单,最有效的复制方式.使用stringIO或临时文件在python中复制很容易,如下所示:

buf = StringIO()

from_curs   = from_conn.cursor()
to_curs     = to_conn.cursor()

from_curs.copy_expert("COPY table TO STDOUT", buf)
buf.seek(0, os.SEEK_SET)
to_curs.copy_expert("COPY table FROM STDIN", buf)
Run Code Online (Sandbox Code Playgroud)

...但这涉及将所有数据保存到磁盘/内存中.

有没有人想出一种方法来模仿像这样的副本中的Unix管道的行为?我似乎无法找到一个不涉及POpen的unix-pipe对象 - 也许最好的解决方案就是使用POpen和subprocess,毕竟.

python sql copy psycopg2 pipe

8
推荐指数
2
解决办法
5375
查看次数

使用类实例作为类属性,描述符和属性

我最近曾说过尝试在Python中使用更新的类(从对象派生的类).作为熟悉它们的例外,我试图定义一个类,它有许多类实例作为属性,每个类实例描述不同类型的数据,例如1d列表,2d数组,标量等.基本上我希望能够写作

some_class.data_type.some_variable
Run Code Online (Sandbox Code Playgroud)

where data_type是一个描述变量集合的类实例.下面是我第一次尝试实现它,只使用一个profiles_1d实例而非通用名称:

class profiles_1d(object):
    def __init__(self, x, y1=None, y2=None, y3=None):
        self.x = x
        self.y1 = y1
        self.y2 = y2
        self.y3 = y3

class collection(object):
    def __init__(self):
        self._profiles_1d = None

    def get_profiles(self):
        return self._profiles_1d

    def set_profiles(self, x, *args, **kwargs):
        self._profiles_1d = profiles_1d(x, *args, **kwargs)

    def del_profiles(self):
        self._profiles_1d = None

    profiles1d = property(fget=get_profiles, fset=set_profiles, fdel=del_profiles,
        doc="One dimensional profiles")
Run Code Online (Sandbox Code Playgroud)

以上代码大致是解决此问题的适当方法.我看到的使用的例子property只是设置了一些变量的值.在这里,我需要使用set方法初始化某个类的实例.如果没有,将非常感谢任何其他更好的方法来实现这一点的建议.

另外,我定义set方法的方式是否正确?通常,根据我的理解,set方法定义了用户键入时要执行的操作,在此示例中,

collection.profiles1d = ...
Run Code Online (Sandbox Code Playgroud)

我可以profiles_1d使用上面的代码正确设置实例属性的唯一方法是键入collection.set_profiles([...], y1=[...], ...),但我认为我不应该直接调用此方法.理想情况下我想输入collection.profiles = ([...], y1=[...], ...) …

python properties class descriptor new-style-class

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

如何在Python列表中将等效项组合在一起?

我有一个清单

x = [2, 2, 1, 1, 1, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

我想把重复的数字放在一起像

[[2,2],[1,1,1,1,1,1]] 
Run Code Online (Sandbox Code Playgroud)

python list

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

按顺序生成字母数字字符串

我正在尝试创建一个循环来生成和打印字符串,如下所示:

  1. 仅限字母数字字符:
  2. 0-9在AZ之前,在az之前,
  3. 长度最多为4个字符.

所以,它会打印:

  1. 来自0-z的所有字符串
  2. 然后从00-zz
  3. 然后来自000-zzz
  4. 然后从0000-zzzz

然后停止

python string algorithm

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