我正在开发一个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关键字的左侧.
但我之前提到的声明没有奏效.
我用不同的方法名称测试了我的声明,如下所示:
extern "C" HRESULT __declspec(dllexport) __stdcall f()
{
return S_OK;
}
Run Code Online (Sandbox Code Playgroud)
并且此方法已成功导出.所以这些说明符可以一起使用.似乎Visual C++编译器将STDAPI和extern"C"HRESULT …
我想我已经开始理解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中的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.
我正在尝试执行代码:
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)
为什么?我该如何解决?
是否存在累积密度函数的精确导数是概率密度函数(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)

如果是这样,我如何缩放衍生物以等同于PDF?
我正在编写一个脚本,使用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中使用更新的类(从对象派生的类).作为熟悉它们的例外,我试图定义一个类,它有许多类实例作为属性,每个类实例描述不同类型的数据,例如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=[...], ...) …
我有一个清单
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 ×9
python-3.x ×2
algorithm ×1
c++ ×1
class ×1
com ×1
copy ×1
descriptor ×1
for-loop ×1
interrupt ×1
list ×1
numpy ×1
performance ×1
pipe ×1
properties ×1
psycopg2 ×1
range ×1
scipy ×1
signals ×1
sql ×1
statistics ×1
string ×1